http://community.topcoder.com/stat?c=problem_statement&pm=13147
此题关键在于发现ABAB的组合最多有26*26种,可以穷举,然后用判断子序列~
#include <vector> #include <iostream> using namespace std; class LongWordsDiv2 { public: string find(string word) { for (int i = 0; i < word.size() - 1; i++) { if (word[i] == word[i+1]) return "Dislikes"; } for (char x = 'A'; x <= 'Z'; x++) { for (char y = 'A'; y <= 'Z'; y++) { string tmp = ""; tmp += x; tmp += y; tmp += x; tmp += y; if (subSeq(word, tmp)) return "Dislikes"; } } return "Likes"; } bool subSeq(string a, string b) { int i = 0; int j = 0; while (i < a.size() && j < b.size()) { if (a[i] == b[j]) j++; i++; } return (j == b.size()); } };