Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình kiểm tra một chuỗi có thể được chia thành ba palindromes hoặc không bằng Python

Giả sử chúng ta có một chuỗi s. Chúng tôi phải kiểm tra xem chúng tôi có thể chia các s thành ba chuỗi con palindromic hay không.

Vì vậy, nếu đầu vào là s =​​"levelpopracecar", thì đầu ra sẽ là True vì chúng ta có thể chia nó thành "level", "pop", "racecar", tất cả đều là palindromes.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • n:=kích thước của s

  • dp:=ma trận bậc n x n và điền sai

  • đối với tôi trong phạm vi n-1 đến 0, giảm 1, thực hiện

    • đối với j trong phạm vi 0 đến n - 1, thực hiện

      • nếu tôi> =j, thì

        • dp [i, j]:=Đúng

      • ngược lại khi s [i] giống với s [j] thì

        • dp [i, j]:=dp [i + 1, j-1]

    • đối với tôi trong phạm vi từ 1 đến n - 1, hãy thực hiện

      • đối với j trong phạm vi i + 1 đến n - 1, thực hiện

        • nếu dp [0, i-1] và dp [i, j-1] và dp [j, n-1] đều đúng thì

          • trả về True

  • trả về Sai

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn

def solve(s):
   n = len(s)

   dp = [[False] * n for _ in range(n)]
   for i in range(n-1, -1, -1):
      for j in range(n):
         if i >= j:
            dp[i][j] = True
         elif s[i] == s[j]:
            dp[i][j] = dp[i+1][j-1]
   for i in range(1, n):
      for j in range(i+1, n):
         if dp[0][i-1] and dp[i][j-1] and dp[j][n-1]:
            return True
   return False

s = "levelpopracecar"
print(solve(s))

Đầu vào

"levelpopracecar"

Đầu ra

True