首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

【字符串最大前缀有关问题】今天的一道笔试题

2012-10-20 
【求助字符串最大前缀问题】今天的一道笔试题今天笔试的一道题,自己算法太弱,没能解出来,求教大牛!题目大意:

【求助字符串最大前缀问题】今天的一道笔试题
今天笔试的一道题,自己算法太弱,没能解出来,求教大牛!
题目大意:字符串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)

[解决办法]

C/C++ code
#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;}
[解决办法]
C/C++ code
#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;} 

热点排行
Bad Request.