题目:
小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。例如:
小易不喜欢”ABBA”,因为这里有两个连续的’B’
小易不喜欢”THETXH”,因为这里包含子序列”THTH”
小易不喜欢”ABACADA”,因为这里包含子序列”AAAA”
小易喜欢”A”,”ABA”和”ABCBA”这些单词
给你一个单词,你要回答小易是否会喜欢这个单词。
输入描述:
输入为一个字符串,都由大写字母组成,长度小于100
输出描述:
如果小易喜欢输出”Likes”,不喜欢输出”Dislikes”
输入例子:
AAA
输出例子:
Dislikes
分析:
前两个条件“单词每个字母都是大写字母”和“单词没有连续相等的字母”比较容易判断,一个for循环解决。
第3个条件可以通过先把字符串的只出现一次的字符去掉,剩下的字符判断是不是ABAB的形式。
答案:
#include <iostream>
#include <string>
using namespace std;
int main(){
string a;
cin>>a;
//下面的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;
}
for (int j=i+1; j<a.length(); j++) {//将只出现一次的字母替换为‘0’,如THETXH替换为TH0T0H
if (a[i]==a[j])
continue;
a.replace(i, 1, "0");
}
}
//将为'0'字符的删掉,变成THTH
for (int i=0; i<a.length(); i++) {
if(a[i]=='0'){
a.erase(i,1);
}
}
if (a.length()<1) {
cout<<"Dislikes"<<endl;
return 0;
}
//找出跟第0个位置一样的字符,记住它位置
int j;
for (int i=1; i<a.length(); i++) {
if (a[i]==a[0]) {
j=i;
break;
}
}
//判断每一次字符串是不是重复出现
for (int i=0; i<j; i++) {
if(a[i]!=a[i+j]){
cout<<"Dislikes"<<endl;
return 0;
}
}
cout<<"Likes"<<endl;
return 0;
}
版权声明:本文为lxubin原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。