正确代码
char * longestCommonPrefix(char ** strs, int strsSize){
int a = strlen(strs[0]);
int i = 0;
char *ptr = strs[0];
for(int j = 1; j < strsSize; j++)
{
for( i = 0; i < a; i++)
{
if(strs[j][i] == ptr[i]);
else break;
}
a = i;
}
ptr[a] = '\0';
return ptr;
}
遇到了深刻的几个问题:
(1)第一种没成功的方法是从每一个字符数组中选取同列元素进行比对,第二种方法是直接选2个字符数组进行比对,看所选的数组的最小同字符串个数。总的来说是以点盖面,跳出来看第二种方法肯定比第一种方法好。
(2)之前一开始就int i了,i就是有效范围较大的了。for循环里面又一次int 了i,导致重复定义,i以第二次定义为准,就成为了局部变量,导致后面运行失败。
(3)巧妙之处:直接把对应的字符串位置更改为‘\0’,再输出该字符串时就被截断了
错误代码(有空再来改)
char * longestCommonPrefix(char ** strs, int strsSize){
char a[200] = {0};
int changdu_min = strlen(strs[0]);
if(strsSize == 1)
{
return strs[0];
}
else
{
for(int m = 0; m < strsSize - 1; m++)
{
if(strlen(strs[m]) < changdu_min)
{
changdu_min = strlen(strs[m]);
}
}
for(int i = 0; i < strsSize; i++)
{
int mn = strs[0][i];
int j;
for( j = 0; j < changdu_min; j++)
{
if(mn == strs[j][i]);
else break;
}
strs[0][j] = '\0';
return strs[0];
}
}
return strs[0];
}
思路重要性,换个思路可能简单很多。