//这题的测试数据很水,以为下面的做法会超时的!呵呵! 题意:在一个字符串中,给出一些字符间的距离,然后 //让你根据这距离再重新组成字符串,检查是否有相同的字符串存在! #include <iostream> #include <string> #include <vector> using namespace std; vector<string> v; int main() { string str, tmp; int i, len, d, j, size, k, l; bool flag1, flag2; while (cin >> str) { if(str == "*") break; len = str.length(); flag2 = false; if (len == 1) cout << str << " is surprising." << endl; else { d = len - 2;//字符的距离范围 for (i = 0; i <= d; i++)//对每一种的距离暴力 { v.clear(); flag1 = false; for (j = 0; j < len; j++) { if (j+i+1 >= len) break; else { tmp.clear(); tmp.push_back(str[j]); tmp.push_back(str[j+i+1]); v.push_back(tmp); } } size = v.size(); //对结果进行判断,如果有相同的字符串,就立刻退出,不用再往下判断! for (k = 0; k < size; k++) for (l = k+1; l < size; l++) { if (v[k] == v[l]) { flag1 = true; break; } } if (flag1) { cout << str << " is NOT surprising." << endl; flag2 = true; break; } } if (!flag2) cout << str << " is surprising." << endl; } } system("pause"); }