假設字符串是「anuja」,輸出應該是2,因爲如果我刪除字符'u'和'n',給定的字符串變成迴文。因此輸出應該是最小刪除次數。 更多示例:輸入字符串:「ababa」 輸出:0(不需要移除) 輸入字符串:「abcdba」 輸出:1(刪除'c'或'd') 請解釋算法。如何將一個字符串轉換爲迴文最少數量的字符串的字符?
3
A
回答
12
讓dp[i, j] = minimum number of removals needed to convert the substring [i, j] to a palindrome
。我們有:
dp[i, i] = 0 for all i (every single character is a palindrome)
爲了找到dp[i, j]
,讓我們考慮一個隨機字符串。我們有兩種可能性:
第一個和最後一個字符相同:
a[i] == a[j]
。在這種情況下,我們可以將問題簡化爲找到需要刪除的最少字符數,以便使子字符串[i+1, j-1]
成爲迴文。第一個和最後一個字符不相同:
a[i] != a[j]
。在這種情況下,我們需要刪除其中的一個。我們將刪除那導致我們更好的解決方案。
因此,我們有:
dp[i, j] = dp[i + 1, j - 1] # if a[i] == a[j]
min(dp[i + 1, j], dp[i, j - 1]) + 1 # otherwise
爲了您的anuja
例子。我們會得到:
| 1 2 3 4 5
-------------
1 | 0 1 2 2 2
2 | 0 1 2 3
3 | 0 1 2
4 | 0 1
5 | 0
注意,矩陣計算先從主對角線,並繼續向上,從而,與對角線平行於主對角線。答案是dp[1, n]
。
這與Levenshtein distance類似,但僅考慮清除。
0
您可以測量從字符串到其反轉的編輯距離(levenshtein距離)(忽略替換)。期望的值將是這個值的一半。
此問題類似於UVA 10739。這是一個example implementation。
示例實現(適用於你的情況),可以是:
string P, Q;
getline(cin, P);
Q = string(P.rbegin(), P.rend());
int p = P.size(), q = Q.size();
for(int i=0; i<=p; i++) { T[i][0] = i; }
for(int i=0; i<=q; i++) { T[0][i] = i; }
for(int i=1; i<=p; i++) {
for(int j=1; j<=q; j++) {
if (P[i-1] == Q[j-1])
T[i][j] = T[i-1][j-1];
else
T[i][j] = min(T[i-1][j], T[i][j-1]) + 1;
}
}
cout << "Case " << tt << ": " << T[p][q]/2 << endl;
相關問題
- 1. 將字符串轉換爲迴文字符串,最小插入
- 2. 如何將字符串的字符串轉換爲字符?
- 3. 要插入字符串以將其轉換爲迴文的最少字符數
- 4. 如何將具有特殊字符的字符串轉換爲轉義字符串的另一個字符串
- 5. 如何將字符串文字轉換爲字符串值
- 6. 將字符串轉換爲字符串
- 7. 將字符串轉換爲字符串
- 8. 將字符串轉換爲字符串
- 9. 如何將矢量字符串轉換爲簡單字符串
- 10. 如何以最少的編輯次數將一個字符串轉換爲另一個字符串?
- 11. 將一個字符串轉換爲另一個字符串
- 12. 如何將一個字符串轉換爲一個字符數組中的字符大小的字符數組?
- 13. 將幾個字符串轉換爲一個字符串
- 14. JQuery.each將字符串文字轉換爲字符串。爲什麼?
- 15. 如何將字符串塊轉換爲字符串數組
- 16. 如何將數據框轉換爲RDD [字符串,字符串]?
- 17. 如何將JSON字符串轉換爲字符串數組?
- 18. 如何將字符串數組轉換爲字符串?
- 19. 如何將字符串數組轉換爲字符串矩陣?
- 20. 如何將字符串轉換爲字符串數組String()?
- 21. 如何將字符串數組轉換爲字符串
- 22. 如何將非空字符串數組轉換爲字符串?
- 23. 如何將數字字符串轉換爲兩個特定的字符串
- 24. 如何將字符串轉換爲HTML友好的字符串
- 25. 如何將字符串轉換爲Perl中的unicode字符串
- 26. 如何將圖像上的字符串轉換爲字符串?
- 27. 如何將Unicode編碼的字符串轉換爲字符串
- 28. 如何將字符串的元組轉換爲字符串*?
- 29. 轉換一個字符串轉換爲字符串
- 30. 將1個字符的字符串轉換爲數字值
不錯的問題。到目前爲止您嘗試了什麼以及解決方案的問題在哪裏? – Paul