C++ 中使字串變為迴文的最小追加次數
問題陳述
給定一個字串,找出追加到它能使其變為迴文的最小字元數。
示例
如果字串為 abcac,我們可以透過追加 2 個高亮的字元來使其變為迴文,例如 abcacba
演算法
- 檢查字串是否已經是迴文,如果是,則無需追加任何字元。
- 逐個從字串中移除一個字元,並檢查剩下的字串是否是迴文
- 重複上述過程,直到字串變為迴文
- 返回到目前為止移除的字元數作為最終答案
示例
#include <iostream> #include <cstring> using namespace std; bool isPalindrome(char *str) { int n = strlen(str); if (n == 1) { return true; } int start = 0, end = n - 1; while (start < end) { if (str[start] != str[end]) { return false; } ++start; --end; } return true; } int requiredAppends(char *str) { if (isPalindrome(str)) { return 0; } return 1 + requiredAppends(str + 1); } int main() { char *str = "abcac"; cout << "Characters to be appended = " << requiredAppends(str) << endl; return 0; }
輸出
當您編譯並執行以上的程式時,它會生成以下輸出:
Characters to be appended = 2
廣告