题目:
第一次的代码:
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));
}
最后我完全换了一种思想,不再去找不同,而是比较每一个字母在各自的字符串出现的次数,如果次数不一样,就找到了增加的字母。而且完全解决之前的两个问题,线上测试也完美通过。
运行结果:
实际上这么简单的题目,我一开始是不在意的,但是计算到后面,发现这个问题还真不是看上去这么简单。花费的时间比之前的题目都要长。程序员的辛苦之处就在这里吧—要考虑到各种发生的情况并解决。