小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。
例如:
小易不喜欢"ABBA",因为这里有两个连续的'B'
小易不喜欢"THETXH",因为这里包含子序列"THTH"
小易不喜欢"ABACADA",因为这里包含子序列"AAAA"
小易喜欢"A","ABA"和"ABCBA"这些单词
给你一个单词,你要回答小易是否会喜欢这个单词。
输入描述:
输入为一个字符串,都由大写字母组成,长度小于100
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。
例如:
小易不喜欢"ABBA",因为这里有两个连续的'B'
小易不喜欢"THETXH",因为这里包含子序列"THTH"
小易不喜欢"ABACADA",因为这里包含子序列"AAAA"
小易喜欢"A","ABA"和"ABCBA"这些单词
给你一个单词,你要回答小易是否会喜欢这个单词。
输入描述:
输入为一个字符串,都由大写字母组成,长度小于100
输出描述:
如果小易喜欢输出"Likes",不喜欢输出"Dislikes"
输入例子1:
AAA
AAA
输出例子1:
Dislikes
Dislikes
#include <iostream> #include <string> #include <vector> using namespace std; int main() { string a; cin>>a; if(1==a.size()){ cout<<"Dislikes"<<endl; return 0; } vector<int>flag(a.size()); //下面的for循环只到a.length()-2,所以额外判断a.length()-1 if (a[a.length()-1]<'A' || a[a.length()-1]>'Z') { cout<<"Dislikes"<<endl; return 0; } for (int i=0; i<a.length()-1; i++) { if (a[i]<'A' || a[i]>'Z') {//是否都是大写字母 cout<<"Dislikes"<<endl; return 0; } if ( a[i]==a[i+1]) {//是否有连续相等字母 cout<<"Dislikes"<<endl; return 0; } int cnt=1; //相等过的字母不再参与第二次比较 if(flag[i]!=1) { for (int j=i+1;j<a.length(); j++) {//将只出现一次的字母替换为‘0’,如THETXH替换为TH0T0H if (flag[j]!=1&&a[i]==a[j]){ flag[j]=1; cnt++; } } if(1==cnt) a.replace(i, 1, "0");//i的取值[0,a.length()-2] } } //将为'0'字符的删掉,变成THTH for (int i=0; i<a.length(); i++) { if(a[i]=='0'){ a.erase(i,1); i=i-1;//删除之前i+1的位置的字母移动到了第i个位置,所以接下来循环理应继续比较第i个位置 } } int j=0; for (int k=0;k<a.size();k++) { //找出跟第0个位置一样的字符,记住它位置 for (int i=k+1; i<a.length(); i++) { if (a[i]==a[k]) { j=i; break; } } //判断每一次字符串是不是重复出现 for (int i=k+1; i<j; i++) { if(i-k+j<a.size()&&a[i]==a[i-k+j]){ cout<<"Dislikes"<<endl; return 0; } } } cout<<"Likes"<<endl; return 0; }