这道题想不到我咋错的-,- 我感觉逻辑很对啊!
然后想了一下我面对这种断断续续处理的字符串时常犯的错误,果然如此!~又忘记最后的部分了...
然后发现没好好看题-,-in the order of being detected.怪不得错了
总结:
1、这里处理#断断续续字符串#依然用的掐头去尾的方法
2、in the order of being detected,需要遍历字符串的方式来保持顺序
3、对待字符串,还有填头去尾的方式~
#include<bits/stdc++.h>
using namespace std;
map<char,bool> mp,mp2;
int main(){
int n;cin>>n;
string s;cin>>s;
char up=s[0];
int num=1;
for(int i=1;i<s.size();i++){
if(s[i]==up) num++;
else{
if(num%n!=0){
mp[up]=true;
}else if(mp.find(up)==mp.end()||!mp[up]){
mp[up]=false;
}
up=s[i];num=1;
}
}
if(num%n!=0){
mp[up]=true;
}else if(mp.find(up)==mp.end()||!mp[up]){
mp[up]=false;
}
mp2=mp;
// for(auto m:mp){
// if(m.second==false) cout<<m.first;
// }
for(int i=0;i<s.size();i++){
if(mp2[s[i]]==false) cout<<s[i];
mp2[s[i]]=true;
}
cout<<endl;
for(int i=0;i<s.size();i++){
cout<<s[i];
if(mp[s[i]]==false) i+=n-1;
}
return 0;
}
//填头去尾
#include<bits/stdc++.h>
using namespace std;
map<char,bool> mp,mp2;
int main(){
int n;cin>>n;
string s;cin>>s;
int num=1;
char up = '#';
s = s + '#';
for(int i=0;i<s.size();i++){
if(s[i]==up) num++;
else{
if(num%n!=0){
mp[up]=true;
}else if(mp.find(up)==mp.end()||!mp[up]){
mp[up]=false;
}
up=s[i];num=1;
}
}
mp2=mp;
for(int i=0;i<s.size();i++){
if(mp2[s[i]]==false) cout<<s[i];
mp2[s[i]]=true;
}
cout<<endl;
for(int i=0;i<s.size()-1;i++){
cout<<s[i];
if(mp[s[i]]==false) i+=n-1;
}
return 0;
}