题解 洛谷P5876 【化简单词】

那么,闲言少叙,现在切入正题吧(我想我的方法不太复杂)!

这道题要用到一个ABOUT字符串的函数:

SUBSTR

这是什么?我们来举个例子:

假设s是一个字符串,s="YOUAREABIGPIG.",我想提取它从下表为0到下表为2的这一段,令他为t。

那么怎样做呢?这就要用到substr了。

表示方法为:t=s.substr(0,3);

如果用广泛的角度来讲,就是:

子串=原串.substr(起始位置,提取的子串的长度);

对于各位巨(蒟)佬(蒻)来说,一定很容易理解吧!

然后,我们对每一个串暴力枚举长度,如果当前长度不可行,就判断再长一点的长度。

怎样判断可不可行呢?挨个枚举其它字符串,看看前缀会不会重复,问题迎刃而解了!

其它注释见代码,那么现在,上代码!

#include<bits/stdc++.h>
using namespace std;
string s[51];
int len[51];
int main()
{
    int n;
    cin>>n;
    int i,j,k;
    for(i=1;i<=n;i++)
    {
        cin>>s[i];
        len[i]=s[i].size();
    }
    //前面是输入,自然不必多说,如果无法理解,请回吧^_^
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=len[i];j++)
        {
            bool flag=true;
            for(k=1;k<=n;k++)
            {
                if(i==k)
                {
                    continue;
                }
                    //如果是同一个串,自然不必判。
                if(s[i].substr(0,j)==s[k].substr(0,j))
                {
                    flag=false;
                }
                    //判断前缀是否相同,相同的话,这个长度就不成立了。
            }
            if(flag)
            {
                cout<<s[i].substr(0,j)<<endl;
                break;
            }
        }
    }
    return 0;
}
View Code

点个赞再走吧!

posted @ 2020-08-08 15:10  Bushuai_Tang  阅读(179)  评论(0编辑  收藏  举报