POJ3096 http://poj.org/problem?id=3096
题目大意:给定一串字符串,如果该字符串不论隔几个字符取两个字符都不会相等,则是“surprising" 否则就是"NOT surprising"
思路:错位比较,将原字符串每次向后移动一个字符位形成的新串与原字符串错位比较,如果有两个字符恰好相同则符合”NOT“的要求。
AC代码:
#include <iostream>
#include <cstring>
using namespace std;
string s1;
int main() {
while(cin >> s1) {
if(s1 == "*") return 0;
else {
if (s1.length() <= 2) cout << s1 << " is surprising.\n";
else {
int ans = 0;
for (int i = 0; i < s1.length() && ans != 2; i++) {
ans = 0;
for (int j = i + 1, k = 0;j < s1.length(); j++,k++) { //错位比较
if (s1[j] == s1[k]) ans++;
if (ans == 2) break;
}
}
if (ans == 2) cout << s1 << " is NOT surprising.\n";
else cout << s1 << " is surprising.\n";
}
}
}
return 0;
}