题目描述
小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。
例如:
小易不喜欢"ABBA",因为这里有两个连续的'B'
小易不喜欢"THETXH",因为这里包含子序列"THTH"
小易不喜欢"ABACADA",因为这里包含子序列"AAAA"
小易喜欢"A","ABA"和"ABCBA"这些单词
给你一个单词,你要回答小易是否会喜欢这个单词(只要不是不喜欢,就是喜欢)。
输入描述:
输入为一个字符串,都由大写字母组成,长度小于100
输出描述:
如果小易喜欢输出"Likes",不喜欢输出"Dislikes"
示例1
输入
AAA
输出
Dislikes
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <string>
#include <cctype>
using namespace std;
#define Max 100
// 判断是否全为大写字母
bool IsUppe(string str, int length)
{
for (int i = 0; i < length; i++)
{
if(!isupper(str[i]))
return false;
}
return true;
}
// 判断有连续相等的字符
bool IsEqual(string str, int length)
{
for (int i = 0; i < length-1; i++)
{
int j = i + 1;
if (str[i] == str[j])
return false;
}
return true;
}
// 判断是否 有相同子序列
bool IsSeq(string str, int length)
{
for (int i = 0; i < length - 3; i++)
{
for (int j = i + 2; j < length; j++)
{
if (str[i] == str[j])
{
for (int k = j + 1; k < length; k++)
{
if (str[k] == str[i+1])
return false;
}
}
}
}
return true;
}
int main()
{
string str;
// cin >> str;
while ( cin >> str )
{
int length = str.size();
bool flag = IsUppe(str, length) && IsEqual(str, length) && IsSeq(str, length);
if (flag)
cout << "Likes";
else
cout << "Dislikes";
}
return 0;
}