学校里的程序设计大赛出了,当时眼前一黑,没读懂啥意思。
仔细想“同一个数组最多出现在一个片段里”这句话,以第一个字符找到它最后一次在字符串里出现的位置,然后看这个区间里的其它字符最后一次出现的位置在哪,如果在后面就向后维护一个最大区间。
我把找到的字符串都舍去了,数据范围小,瞎写都行,逃了逃了。
#include<bits/stdc++.h>
using namespace std;
map<char,int> mp;
int main(){
int t;
cin>>t;
while(t--){
string s;
cin>>s;
while(s.size()){
char am=s[0];
int index=0;
for(int i=1;i<s.size();i++){
if(am==s[i]){
index=i;
}
}
for(int i=0;i<=index;i++){
char bm=s[i];
for(int j=0;j<s.size();j++){
if(bm==s[j]&&index<j){
index=j;
}
}
}
int len=s.size();
string str=s.substr(index+1,len-index+1);
s=str;
cout<<index+1<<" ";
}
cout<<endl;
}
return 0;
}
//ababcbacadefegdehijhklij