找两个字符串中添加的那个字符

来源:互联网 发布:js获取事件源的值 编辑:程序博客网 时间:2024/06/12 21:29

题目:
这里写图片描述
第一次的代码:

char findTheDifference(char* s, char* t) {    char* aa = s;    while (*t)    {        while (*s)        {            if (*s==*t)            {                t++;                s = aa;                break;            }            s++;        }        if (!*s)        {            break;        }    }    return *t;}

第一次的代码确实能解决一部分问题,因为示例给的是没有重复字母的组合”abcd”和”abcde”,但是如果给的是有重复的字符,比如给的字符串是”aa”和”aaa”,那么这个代码就是错误的。

第二次的代码

char findTheDifference(char* s, char* t) {    while (*s&&*t)    {        if (*s!=*t)        {            break;        }        s++;        t++;    }    return *t;}

这次的函数是按顺序对比每一个字母,直到发现不同。
第二次的代码解决上一次的问题,但是,问题又来了,如果给的字母组合不是按顺序排列的,那这个代码也是错的,比如字符串是”abcde”和”cbdafe”,那么运行就会出错

最终代码

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>char findTheDifference(char* s, char* t) {    int ia = 0;    int ib = 0;    char* aa = s;    char* bb = t;    char* m = t;    while (*m)    {        t = bb;        while (*t)        {            if (*m == *t)            {                ia++;                t++;            }            else            {                t++;            }        }        s = aa;        while (*s)        {            if (*m == *s)            {                ib++;                s++;            }            else            {                s++;            }        }        if (ia>ib)        {            break;        }        m++;    }    return *m;}int main(){    char* a = "abcde";    char* b = "cdefab";    printf("%c", findTheDifference(a, b));}

最后我完全换了一种思想,不再去找不同,而是比较每一个字母在各自的字符串出现的次数,如果次数不一样,就找到了增加的字母。而且完全解决之前的两个问题,线上测试也完美通过。
运行结果:
这里写图片描述

这里写图片描述

实际上这么简单的题目,我一开始是不在意的,但是计算到后面,发现这个问题还真不是看上去这么简单。花费的时间比之前的题目都要长。程序员的辛苦之处就在这里吧—要考虑到各种发生的情况并解决。

阅读全文
0 0