如果小易喜欢输出"Likes",不喜欢输出"Dislikes"
C++代码:
#include <iostream> using namespace std; int findLCS(string A, int n, string B, int m) {// 最长公共子序列 string strA = "#" + A; string strB = "#" + B; int C[n+1][m+1]; for(int i=0; i <= n; i++) C[i][0] = 0; for(int i=0; i <= m; i++) C[0][i] = 0; for(int i=1; i <= n; i++) { for(int j=1; j <= m; j++) { if(strA[i] == strB[j]) C[i][j] = C[i-1][j-1] + 1; else if(C[i-1][j] > C[i][j-1]) C[i][j] = C[i-1][j]; else C[i][j] = C[i][j-1]; } } return C[n][m]; } bool isLikeWord(const string& str) { for(string::size_type i=0; i < str.size()-1; i++) { for(string::size_type j=i+1; j < str.size(); j++) { string s = ""; s = s + str[i] + str[j] + str[i] + str[j]; if(4 == findLCS(str, str.size(), s, s.size())) return false; } } return true; } int main() { string str; while(cin >> str) { bool isLike = true; int flag[256] = {0}; for(string::size_type i=0; i < str.size(); i++) { if((str[i] < 'A' || str[i] > 'Z') || ++flag[str[i]] >= 4 || (i+1 < str.size() && str[i] == str[i+1])) {// 必须是大写字母、不存在4个及以上的字母、不存在连续的字母 isLike = false; break; } } if(isLike) { isLike = isLikeWord(str);// 取每两个字符组成 xyxy 和 字符串求最大公共子序列,若最后求得的长度正好为 4 说明,包含在里面 } if(isLike) cout << "Likes" << endl; else cout << "Dislikes" << endl; } return 0; }