Python程式:刪除兩端相同字元後找到字串的最小長度
假設我們有一個字串s,其中只有三個字元'a'、'b'和'c'。我們將對字串應用以下演算法任意多次:
從s中選擇一個非空字首,其中字首中的所有字元都相同。
從s中選擇一個非空字尾,其中字尾中的所有字元都相同。
字首和字尾不相交。
字首和字尾中的字元必須相同。
從s中刪除字首和字尾。
最後,我們必須找到執行上述操作任意次數(可能為零次)後s的最小長度。
因此,如果輸入類似於s = "aabccabba",則輸出將為3,因為我們首先可以選擇prefix = "aa"和suffix = "a",這樣刪除後的字串為"bccabb",然後選擇prefix = "b"和suffix "bb",這樣刪除後的字串為"cca",其長度為3。
為了解決這個問題,我們將遵循以下步驟:
s := 用s建立一個佇列
當s的大小 > 1 且s[0] 等於s的最後一個元素時,執行以下操作:
chk := s[0]
當s不為空且s[0] 相同,執行以下操作:
從s中刪除左端元素
當s不為空且s的最後一個元素與chk相同,執行以下操作:
從s中刪除右端元素
返回s的大小
示例
讓我們看看下面的實現以更好地理解:
from collections import deque def solve(s): s = deque(s) while len(s) > 1 and s[0] == s[-1]: chk = s[0] while s and s[0] == chk: s.popleft() while s and s[-1] == chk: s.pop() return len(s) s = "aabccabba" print(solve(s))
輸入
"aabccabba"
輸出
3
廣告