小易喜欢的单词具有以下特性:
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;
}