您的位置:首页 > 其它

POJ 2744 子串 解题报告

2009-01-22 18:29 309 查看
POJ 2744 子串 解题报告

编号:2744

 

考查点:字符串处理,大量的string.h函数使用.

 

思路:先找出最短的字符串,然后利用最短字符串从长到短产生搜索子串,然后进行匹配检测,难点应该是从长到短产生搜索子串时不能有遗漏..

 

提交情况:strrev函数不见了..改成_strrev()了,导致一直compile
error,在我自己VS里是可以编译过的撒,后来看到warning后改过来就AC了

 

Source Code:

 

//POJ Grids 2744

#include <iostream>

#include <string.h>

using namespace std;

char ch[100][101];

unsigned int sublen(char* pch,unsigned int len,int m)

{

    char sub[101],rev[101];

    memset(sub,0,101*sizeof(char));

    memset(rev,0,101*sizeof(char));

    unsigned int sublength = len;

    while (sublength)

    {

        for (int i=0;sublength<=len-i;i++)

        {

            strncpy(sub,pch+i,sublength);

            sub[sublength] = '\0';

            strcpy(rev,sub);

            _strrev(rev);

            rev[sublength] = '\0';

            bool flag = true;

            for (int j=0;j<m;j++)

            {

                if (!(strstr(ch[j],sub)||strstr(ch[j],rev)))

                {

                    flag = false;

                    break;

                }

            }

            if (flag)

            {

                return sublength;

            }

        }

        sublength--;    

    }

    return sublength;

}

int main()

{

    memset(ch,0,100*101*sizeof(char));

    int n;

    cin>>n;

    for (int i=0;i<n;i++)

    {

        int m;

        cin>>m;

        unsigned int len = 101;

        int index = 0;

        char min[101];

        memset(min,0,101*sizeof(char));

        for (int j=0;j<m;j++)

        {

            cin>>ch[j];

            if (len > strlen(ch[j]))

            {

                strcpy(min,ch[j]);

                len = strlen(min);

                index = j;

            }

        }

        strcpy(ch[index],ch[m-1]);

        int sub = sublen(min,len,m-1);

        cout<<sub<<endl;

    }

    return 0;

}
总结:这道题有点复杂,但还不算难吧,搜索字串那点看了书才做出来的,比书上的代码优化了一点,不用在最短字符串自身搜索子串了..

 

 

                                                      
By   Ns517

                                                     
Time 09.01.22
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: