你去探险海岛,并做好记录,每个岛名之间用“-”隔开,如 xuan-xiao-ma,分别依次探寻到 的三个岛屿 xuan、xiao 和 ma。你知道自己前面已经到过一些岛屿,你想知道这一轮探险能 发现最多多少新的海岛。这一轮有到过的也不属于新发现。如果没有新发现,则输出-1.区 分大小写
第一行:整数 n 第二行:一个字符串,为这轮探险之前的记录的已经到过的海岛。 接下来 n 行:每行一个字符串,为记录的这一轮以此到过的海岛,第 i 行为第 i 次探险。
一行一个整数表示发现最多的新海岛的次序,没有则输出-1。
2 xuan-xiao xuan-da-ma xuan-xiao-ma-xuan
1
前面探险过的:”xuan“和”xiao“,这一轮第 1 次探险发现两个”da“和”ma“海岛,第 2 次没有 发现新的海岛(ma 第 1 次已经发现了)
0≤n≤1000,1 <=海岛名字长度<= 10000,保证输入只包含大小写和-
#include<bits/stdc++.h>
using namespace std;
int n,l=0,sum=0;
string s,S,str;
vector<string> v;
int main() {
//freopen("number.in","r",stdin);
//freopen("number.ans","w",stdout);
cin>>n>>s;
for (int i=0;i<s.size();i++){
if(s[i]=='-') v[++l]={};
else v[l].push_back(s[i]);
}
for (int i=1;i<=n;i++){
cin>>S;
str={ };
int cnt=0;
for (int j=0;j<S.size();j++){
if(S[j]=='-' || j==S.size()-1){
int flag=0;
for(int k=0;k<v.size();k++){
if(str==v[k]){
flag=1;
break;
}
}
if(flag==0){
++l;
v[l]=str;
cnt++;
str={ };
}
}
else {
str.push_back(S[j]);
}
}
sum=max(sum,cnt);
}
if(sum==0)cout<<-1;
else cout<<sum;
return 0;
}
求调求关