C++で文字列回文を作成するために必要な追加の最小数
問題の説明
文字列を指定して、文字列回文を作成するために追加する最小文字を見つけます。
例
文字列がabcacの場合、2つのハイライト文字、つまりabcacbaを追加することで文字列回文を作成できます
アルゴリズム
- 文字列がすでに回文であるかどうかを確認します。ある場合は、文字を追加する必要はありません。
- 文字列から1文字ずつ削除し、残りの文字列が回文であるかどうかを確認します
- 弦がパリドロームになるまで上記のプロセスを繰り返します
- 最終回答までに削除された文字数を返します
例
#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
-
数値がC++の回文であるかどうかを確認します
ここでは、番号が回文であるかどうかを確認する方法を説明します。回文数は両方向で同じです。たとえば、番号12321は回文ですが、12345は回文ではありません。 ロジックは非常に単純です。数を逆にする必要があります。逆の数が実際の数と同じである場合、それは回文です。そうでない場合はそうではありません。より良いアイデアを得るためのアルゴリズムを見てみましょう。 アルゴリズム isPalindrome(n)- 入力 −数n 出力 −数値が回文の場合はtrue、それ以外の場合はfalse begin temp := n rev :=
-
Pythonで文字列回文を作成するために必要な最小文字数をチェックするプログラム
文字列sがあるとすると、文字列が回文になるように挿入する必要のある最小文字数を見つける必要があります。 したがって、入力がs =madの場合、出力は2になります。これは、amを挿入してmadamを取得できるためです。 これを解決するには、次の手順に従います- 関数dp()を定義します。これにはi、jが必要です =jの場合、 0を返す s[i]がs[j]と同じ場合、 dp(i + 1、j-1)を返す それ以外の場合 dp(i + 1、j)およびdp(i、j-1)+1の最小値を返します メインの方法から、次のようにします dp(