P3370 【模板】字符串哈希
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,num=0;
cin>>n;
string a[10005];
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);//通过排序将相同或类似字符串排在一起
for(int i=0;i<n-1;i++){
if(a[i]==a[i+1]){//会逐字符比较两个字符串,如果这两个字符串在相同的位置上的字符都相等,条件就会为真
num++;
}
}
cout<<n-num;
return 0;
}
P2957 [USACO09OCT] Barn Echoes G
#include<bits/stdc++.h>
using namespace std;
int main(){
string s1,s2;
cin>>s1>>s2;
int n=s1.length(),m=s2.length(),num=0,sum=0;
for(int i=1;i<=min(m,n);i++){//比较s1前缀和s2后缀
if(s1.substr(0,i)==s2.substr(m-i,i)){
num=i;
}
}
for(int i=1;i<=min(n,m);i++){
if(s2.substr(0,i)==s1.substr(n-i,i)){//比较s2前缀和s1后缀
sum=i;
}
}
num=max(num,sum);
cout<<num;
return 0;
}
原本两个if语句后还有else{break;},表示出现不同字符串后终止循环,然后就错了,不知道为什么。