牛客网 21天 2.2小易喜欢的单词

小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。
例如:
小易不喜欢"ABBA",因为这里有两个连续的'B'
小易不喜欢"THETXH",因为这里包含子序列"THTH"
小易不喜欢"ABACADA",因为这里包含子序列"AAAA"
小易喜欢"A","ABA"和"ABCBA"这些单词
给你一个单词,你要回答小易是否会喜欢这个单词(只要不是不喜欢,就是喜欢)。 

输入描述:

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


 

输出描述:

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

示例1

输入

AAA

输出

Dislikes

c++

#include<iostream>
#include<string>
using namespace std;

int main(){
    string a;
    cin>>a;
    int len = a.length();
    //下面的for循环只到len-2,所以额外判断len-1
    // 条件一 :判断大小写
    if(a[len-1]<'A' || a[len-1]>'Z'){
        cout<<"Dislikes"<<endl;
        return 0;
    }
    for(int i=0; i<len-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;
        }
        //将只出现一次的字母换成0  因为只出现一次的无法形成“xyxy”形式
        for(int j=i+1; j<len; j++){
            if(a[i] == a[j])
                continue;
            //从i位置之后的1个字符 换成 “0”
            a.replace(i, 1, "0");
        }
    }
    //将为0的删除
    for(int i=0; i<len; i++){
        if(a[i] == 0){
             //删除从i开始的1个字符
            a.erase(i, 1);
        }
    }
    //重新获取长度
    len = a.length();
    //如果长度<1 
    if(len < 1){
        cout<<"Dislikes"<<endl;
        return 0;
    }
    //找出跟第0个位置一样的字符,记住它位置
    int j;
    for(int i=0; i<len; 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;
}

python

# -*- coding: UTF-8 -*-
string = raw_input()
length = len(string)
flag = 1
#条件一:判断是否全为大写字母
if string.upper() != string:
    flag = 0
if string.upper() == string:
    #条件三:判断是否有相邻重复字母
    for i in range(length-1):
        if string[i] == string[i+1]:
            flag = 0
            break
    #条件二:先寻找当前字母之后是否有相同字母
    for i in range(length-3):
        x1 = string.find(string[i], i+2)
        if x1 == -1:
            continue
        else:
            #i+1位置字母与找到的位置之后是否有相同字母  有则符合xyxy形式
            for j in range((i+1), x1):
                x2 = string.find(string[j], (x1+1))
                if x2>0:
                    flag = 0
                    break
if flag==0:
    print 'Dislikes'
else:
    print 'Likes'

java

import java.io.*;
public class Main{
    public static void main(String[] args)throws Exception{
       BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        String s=reader.readLine();
        char[] c=s.toCharArray();
        boolean flag=true;
        for(int i=0;i<c.length;i++){
            if(!('A'<=c[i]&&c[i]<='Z')){
                flag=false;
            }
         
             
            if(i+1<c.length&&c[i]==c[i+1]){
                flag=false;
                }
                  if(i+3<c.length&&c[i]==c[i+2]&&c[i+1]==c[i+3]){
                flag=false;
            }
             
            if(!flag){
                break;
            }
        }
     
        if(flag){
           System.out.println("Likes");
 
        }else{
                       System.out.println("Dislikes");
        }
         
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值