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

题目:

小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。

例如:
小易不喜欢”ABBA”,因为这里有两个连续的’B’
小易不喜欢”THETXH”,因为这里包含子序列”THTH”
小易不喜欢”ABACADA”,因为这里包含子序列”AAAA”
小易喜欢”A”,”ABA”和”ABCBA”这些单词
给你一个单词,你要回答小易是否会喜欢这个单词。

输入描述:

输入为一个字符串,都由大写字母组成,长度小于100

输出描述:

如果小易喜欢输出”Likes”,不喜欢输出”Dislikes”

输入例子:

AAA

输出例子:

Dislikes

分析:

前两个条件“单词每个字母都是大写字母”和“单词没有连续相等的字母”比较容易判断,一个for循环解决。
第3个条件可以通过先把字符串的只出现一次的字符去掉,剩下的字符判断是不是ABAB的形式。

答案:

#include 
#include 
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"<return 0;
    }

    for (int i=0; i1; i++) {

        if (a[i]<'A' || a[i]>'Z') {//是否都是大写字母
            cout<<"Dislikes"<return 0;
        }

        if ( a[i]==a[i+1]) {//是否有连续相等字母
            cout<<"Dislikes"<return 0;
        }

        for (int j=i+1; j//将只出现一次的字母替换为‘0’,如THETXH替换为TH0T0H
            if (a[i]==a[j])
                continue;
            a.replace(i, 1, "0");
        }
    }

    //将为'0'字符的删掉,变成THTH
    for (int i=0; iif(a[i]=='0'){
            a.erase(i,1);
        }
    }

    if (a.length()<1) {
        cout<<"Dislikes"<return 0;
    }

    //找出跟第0个位置一样的字符,记住它位置
    int j;
    for (int i=1; iif (a[i]==a[0]) {
            j=i;
            break;
        }
    }
    //判断每一次字符串是不是重复出现
    for (int i=0; iif(a[i]!=a[i+j]){
            cout<<"Dislikes"<return 0;
        }
    }

    cout<<"Likes"<return 0;
}



你可能感兴趣的:(C++,面试题目)