题意:
定义D-pairs表示取字符串s中相距为D的两个字母所构成的字母对,该字母对中两个字母的位置顺序与他们在主串s中的位置顺序一致。定义D-unique表示,若从字符串s中取出所有相距为D的字母对D-pairs,且这些D-pairs都是独一无二的,那么成字符串s是一个D-unique串。D的取值范围为0~s.len()-2
思路:用STL里面的vector 即可 暴力破解:
代码如下:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
string str;
while(cin>>str,str != "*")
{
int len = str.length();
if(len == 1 || len == 2)
{
cout << str << " is surprising." << endl;
continue;
}
bool is_sur = true;
/*对D-pairs行测试,其中D的大小为[0, length(str)-2]*/
for(int i = 0; i <= len - 2; i++)
{
vector<string> strvec; //存储i-pairs字符串
for(int it = 0; it < len - i - 1; it++)
{
char ch[3];
ch[0] = str[it];
ch[1] = str[it + i + 1];
ch[2] = '\0';
string new_str(ch); //生成一个新的i-pairs串
strvec.push_back(new_str); //插入
}
/*判断i-pairs是否unique*/
for(vector<string>::size_type ix = 0; ix != strvec.size() - 1; ix++) {
for(vector<string>::size_type ix2 = ix + 1; ix2 != strvec.size(); ix2++) {
/*若有两个i-pairs串是相同的,则跳出*/
if(strvec[ix] == strvec[ix2])
{
is_sur = false;
}
}
}
}
if(is_sur) //测试完所有D-pairs串,均unique
cout << str << " is surprising." << endl;
else
cout << str << " is NOT surprising." << endl;
}
return 0;
}