1 条题解
-
0
自动搬运
来自洛谷,原作者为

Clown
AFOed搬运于
2025-08-24 22:15:10,当前版本为作者最后更新于2020-02-20 14:17:37,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
进入正题前,先重磅推荐乱码团队以及我的博客。
当然,还要提醒大家,不能抄代码,请详细阅读洛谷社区规则!
本蒟蒻衷心希望管理员给个通过^_^
那么,闲言少叙,现在切入正题吧(我想我的方法不太复杂)!
这道题要用到一个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; }点个赞再走吧!
- 1
信息
- ID
- 4877
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者