मान लीजिए हमारे पास एक स्ट्रिंग s है। हमें जांचना है कि क्या हम s को तीन पैलिंड्रोमिक सबस्ट्रिंग में विभाजित कर सकते हैं या नहीं।
उदाहरण के लिए, यदि इनपुट s = "levelpopracecar" है, तो आउटपुट True होगा क्योंकि हम इसे "level", "pop", "racecar" में विभाजित कर सकते हैं, जो सभी पैलिंड्रोम हैं।
हल करने के चरण
n := len(s)dp :=क्रमn x nका मैट्रिक्स औरFalseसे भरेंiकोn-1से 0 तक घटाते हुए लूप चलाएं:jको 0 सेn - 1तक लूप चलाएं:- यदि
i >= j, तोdp[i][j] := True - अन्यथा यदि
s[i] == s[j], तोdp[i][j] := dp[i+1][j-1]
- यदि
iको 1 सेn - 1तक लूप चलाएं:jकोi+1सेn - 1तक लूप चलाएं:- यदि
dp[0][i-1]औरdp[i][j-1]औरdp[j][n-1]सभी True हैं, तोTrueवापस करें।
- यदि
Falseवापस करें।
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
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))
इनपुट
"levelpopracecar"
आउटपुट
True