您的位置:首页 > 编程语言 > C语言/C++

网易笔试编程题:小易喜欢的单词(C++)

2016-08-27 23:11 369 查看

题目:

小易喜欢的单词具有以下特性:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 编程 笔试