算法---小易喜欢的单词

小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。
例如:
小易不喜欢"ABBA",因为这里有两个连续的'B'
小易不喜欢"THETXH",因为这里包含子序列"THTH"
小易不喜欢"ABACADA",因为这里包含子序列"AAAA"
小易喜欢"A","ABA""ABCBA"这些单词
给你一个单词,你要回答小易是否会喜欢这个单词。
输入描述:
输入为一个字符串,都由大写字母组成,长度小于100
输出描述:
如果小易喜欢输出"Likes",不喜欢输出"Dislikes"
示例1
**输入**
AAA
**输出**
Dislikes

对此题做一下三步:
1,是否全部为大写
2,是否有连续的字符
3,是否有相同的字符串序列
相信大家对前两种都比较熟悉,我们简单说一下:

1,使用字符串的.upper()方法,可以判断这个字符是否全部是大写
2,使用一个for循环遍历,判断是否 [i] == [i+1],完成第二步
我们重点分析第三步。
3,首先通过前面的分析我们知道,只有没有连续的字符我们才考虑第三种情况,首先我们遍历字符串,i -> len - 2 然后使用
x1 = string.find(string[i], i+2) find方法,
返回为找到第一个相同字符的下标,
if返回-1,则后面有没有相同字符,结束,if >0,就表明后面字符有相同的字符,那么我们就考虑存在相同的序列吗?
那么此时,我们再次遍历,下标当然从 i+1 -> X1, 看这个范围的字符,有没有在x1->len(string) 之间出现,如果出现,则表明有相同序列,返回Dislikes

string = input()
count = 1
lenth = len(string)
if string.upper() != string:
    count = 0
else:
    for i in range(lenth -1):
        if string[i] == string [i+1]:
            count = 0

    for i in range(lenth - 3):#为什么减3?,大家思考一下
        x1 = string.find(string[i], i+2)#因为不考虑相邻元素,因此从i+2开始,
        if x1 == -1:
            continue
        else:
            for j in range(i+1, x1):#从
                x2 = string.find(string[j], x1+1)#起始位置x1+1,终止位置:默认为字符串长度,向后搜索,如果有返回下标,没有返回-1
                if x2 > 0:
                    count = 0
                    break

if count == 0:
    print('Dislikes')
else:
    print('Likes')

如果有问题请大家指正

你可能感兴趣的:(python-基础,python)