1. 程式人生 > >演算法---小易喜歡的單詞

演算法---小易喜歡的單詞

小易喜歡的單詞具有以下特性:
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')

如果有問題請大家指正