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

更新於:2021年10月6日

300 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告