找出一群array裡面, 最長的共同prefix, 回傳這個共同prefix.
看大家好像都直接以第一個為基準去比別人,
但總覺得不同長度會有點麻煩?!
就萬一最長共同字串剛好就是長度最短的那個人,
降子在比較的時候, 勢必會比到結束字元, 然後感覺會爆炸
所以我一開始是先全部跑一遍找到最短的字串, 移到第一個, 當我的基準
因為不是太複雜的題目所以速度也沒有爆炸慢,
那就讓我們先找最短字串出來當基準吧呵呵呵~~~(櫻花樹下奔跑)
另外就是其實不必每次都跑到字串長度
雖然也是都會在不符合的時候就break了啦,
但總之可以設定最長為當下的max prefix length就可以了
反正前面已經有人只match到這裡, 不可能再長了.
以上.
Longest Common Prefix
void swap(char** a, char** b){
char *tmp;
tmp = *a;
*a=*b;
*b=tmp;
}
char* longestCommonPrefix(char** strs, int strsSize) {
if (strs== NULL || strsSize ==0)
return "";
if (strsSize==1)
return strs[0];
int i=0;
int minIndex=0;
for(i=0;i<strsSize;i++)
{
if (strlen(strs[i])< strlen(strs[minIndex]))
minIndex = i;
}
swap(strs[0],strs[minIndex]);
int preLength=0, max = strlen(strs[0]);
for(i=1;i<strsSize;i++)
{
for(preLength =0; preLength < max/*strlen(strs[0])*/; preLength++)
if(strs[0][preLength]!=strs[i][preLength])
break;
max = (preLength < max)? (preLength) : max;
}
char *ret = malloc(sizeof(char)*(max+1));
memset(ret,0,max+1);
strncpy(ret, strs[0], max);
return ret;
}
沒有留言:
張貼留言