【求助字符串最大前缀问题】今天的一道笔试题
今天笔试的一道题,自己算法太弱,没能解出来,求教大牛!
题目大意:字符串A:accdefcdfg,字符串B:cdfgab,在B中,c,cd,cdf,cdfg...都可以称为是B的前缀,现在在A中寻找B的最大前缀,打印最大前缀并返回最大前缀的位置。比如,B在A中的前缀有,c,cd,cdfg,最大前缀是cdfg,打印出cdfg返回7.注意不区分大小写。
int LongestPrefixPosition(char *str1,char *str2)
[解决办法]
#include <stdio.h>#include <malloc.h>#include <string.h>#include<ctype.h> int find(const char *str,const char *substr){ int end,i,j; end = strlen(str) - strlen(substr); if ( end > 0 ) for ( i = 0; i <= end; i++ ) for ( j = i; tolower(str[j]) == tolower(substr[j-i]); j++ ) if ( substr[j-i+1] == '\0' ) return i + 1; return -1;}int LongestPrefixPosition(const char *str1,const char *str2){ int len = strlen(str2); char *pstr = (char *)malloc(len+1); int pos; while(len>0) { strncpy(pstr,str2,len); pstr[len--] = '\0'; pos = find(str1,pstr); if(pos>0) { printf("位置为 %d ,最长前缀为 %s\n",pos,pstr); free(pstr); return pos; } } printf("不存在任何前缀\n"); free(pstr); return -1; }int main(){ LongestPrefixPosition("accdefcdfg","cdfgab"); return 0;}
[解决办法]
#include <stdio.h>#include <stdlib.h>int LongestPrefixPosition(char *str1, char *str2){ int count = 0; int max = 0; char *str1_temp = str1; char *start; while(str1[count]!='\0') { if(str1[count]==str2[count]) { ++count; } else { if(count>max) { max = count; start = str1; } ++str1; count = 0; } } if(count>max) { max = count; start = str1; } int i; for(i=0; i<max; ++i) { printf("%c",start[i]); } return start-str1_temp+1;}void main(){ printf("%d\n", LongestPrefixPosition("accdefcdfg","cdfgab")); return;}