1. 程式人生 > >Python練習筆記 - - 彩色寶石項鍊

Python練習筆記 - - 彩色寶石項鍊

Python練習筆記 - - 彩色寶石項鍊

題目描述

有一條彩色寶石項鍊,是由很多種不同的寶石組成的,包括紅寶石,藍寶石,鑽石,翡翠,珍珠等。有一天國王把項鍊賞賜給了一個學者,並跟他說,你可以帶走這條項鍊,但是王后很喜歡紅寶石,藍寶石,紫水晶,翡翠和鑽石這五種,我要你從項鍊中擷取連續的一小段還給我,這一段中必須包含所有的這五種寶石,剩下的部分你可以帶走。如果無法找到則一個也無法帶走。請幫助學者找出如何切分項鍊才能夠拿到最多的寶石。

輸入描述:

我們用每種字元代表一種寶石,A表示紅寶石,B表示藍寶石,C代表紫水晶,D代表翡翠,E代表鑽石,F代表玉石,G代表玻璃等等,我們用一個全部為大寫字母的字元序列表示項鍊的寶石序列,注意項鍊是首尾相接的。每行代表一種情況。

輸出描述:

輸出學者能夠拿到的最多的寶石數量。每行一個

示例

輸入
ABCYDYE
ATTMBQECPD

輸出
1
3

解題思路&程式碼段

解題思路:通過每次對字串左移一位,構造出新的字串,然後再判包含’ABCDE’的斷最小段。

python3

s = input()
l =
len(s) #最小子串初始化為整個字串長度 min = l # 查詢包含'ABCDE'最短的字串 for i in range(l): x = [] for j in 'ABCDE': #找到'A、B、C、D、E'在字串中第一次出現的位置 x.append(s.find(j)) #對'A、B、C、D、E'中字元第一次出現的下標進行排序 x.sort() #min表示包含'ABCDE'的最短子串 if min > x[-1]: min = x[-1
] #更改字元排序使其左移一位,則包含'ABCDE'最短的字串會做一次開頭,所以能找到min s = s[1:] + s[0] print(l-min-1)