C++で文字列回文を作成するための削除の最小数。
問題の説明
サイズ「n」の文字列が与えられます。タスクは、文字列回文を作成するために最小数の文字を削除することです。
指定された文字列が「abcda」の場合、最初と最後を除く任意の2文字を削除して、回文にすることができます。
-
文字「b」と「c」を削除すると、「ada」文字列は回文になります
-
文字「c」と「d」を削除すると、「aba」文字列は回文になります
-
文字「b」と「d」を削除すると、「aca」文字列は回文になります
アルゴリズム
1. Find longest palindromic subsequence of given string. Let’s call it as “lpsSize”. 2. Minimum characters to be deleted = (length of string – lpsSize) Code.
例
#include <iostream> #include <algorithm> using namespace std; int lps(string s, int i, int j){ if (i == j) { return 1; } if (s[i] == s[j] && i + 1 == j) { return 2; } if (s[i] == s[j]) { return lps(s, i + 1, j - 1) + 2; } return max(lps(s, i, j - 1), lps(s, i + 1, j)); } int minDeletion(string s){ int n = s.size(); int lpsSize = lps(s, 0, n); return (n - lpsSize); } int main(){ cout << "Minimum characters to be deleted = " << minDeletion("abcda") << endl; return 0; }
出力
上記のプログラムをコンパイルして実行する場合。次の出力を生成します-
Minimum characters to be deleted = 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(