题意理解:
从给定字符串中,每隔固定间隔取两个字符,组成一对。如果针对所有固定间隔取出的数对均不相等,则该字符串为surprise字串。
解题思路:
利用map容器,第一个值不能相同的特性进行问题求解;
解题代码:
#include<iostream>
#include<string>
#include<map>
#include<utility>
using namespace std;
int main(int argc, char *argv[]){
string s;
while(cin>>s, s!="*"){
bool isSurprising=true;
for(int i=1;i<s.length();i++){//0-pair 1-pair
int subStrNum=0;
map<string,int> mString;
for(int j=0;j<s.length()-i;j++){
string subString="";
subString+=s[j];
subString+=s[j+i];
// cout<<"insert: "<<subString<<endl;
mString.insert(pair<string,int>(subString,0));
subStrNum++;
}
if(mString.size()==subStrNum){
// cout<<"i= "<<i+1<<endl;
continue;
}else{
cout<<s<<" is NOT surprising."<<endl;
isSurprising=false;
break;
}
}
if(isSurprising){
cout<<s<<" is surprising."<<endl;
}
}
return 0;
}