最長のパリンドロームサブシーケンス用のJavaプログラム
最長のパリンドロームサブシーケンスの場合、Javaコードは次のとおりです-
例
public class Demo{
static String longest_seq(String str_1, String str_2){
int str_1_len = str_1.length();
int str_2_len = str_2.length();
char str_1_arr[] = str_1.toCharArray();
char str_2_arr[] = str_2.toCharArray();
int L[][] = new int[str_1_len + 1][str_2_len + 1];
for (int i = 0; i <= str_1_len; i++){
for (int j = 0; j <= str_2_len; j++){
if (i == 0 || j == 0){
L[i][j] = 0;
}
else if (str_1_arr[i - 1] == str_2_arr[j - 1]){
L[i][j] = L[i - 1][j - 1] + 1;
}
else{
L[i][j] = Math.max(L[i - 1][j], L[i][j - 1]);
}
}
}
int my_index = L[str_1_len][str_2_len];
char[] longest_seq = new char[my_index + 1];
int i = str_1_len, j = str_2_len;
while (i > 0 && j > 0){
if (str_1_arr[i - 1] == str_2_arr[j - 1]){
longest_seq[my_index - 1] = str_1_arr[i - 1];
i--;
j--;
my_index--;
}
else if (L[i - 1][j] > L[i][j - 1]){
i--;
} else {
j--;
}
}
String my_result = "";
for (int x = 0; x < longest_seq.length; x++){
my_result += longest_seq[x];
}
return my_result;
}
static String longestPalSubseq(String str){
String rev_str = str;
rev_str = reverse_str(rev_str);
return longest_seq(str, rev_str);
}
static String reverse_str(String str){
String my_result = "";
char[] trial = str.toCharArray();
for (int i = trial.length - 1; i >= 0; i--){
my_result += trial[i];
}
return my_result;
}
public static void main(String[] args){
String str = "HelloHelloo";
System.out.println("Longest palindromic subsequence is ");
System.out.println(longestPalSubseq(str));
}
} 出力
Longest palindromic subsequence is llell
Demoという名前のクラスには、2つの文字列と2つの文字配列を宣言する関数「longest_seq」が含まれています。動的計画法を使用して、配列が繰り返され、最長のパリンドロームシーケンスが検出されます。この方法では、特定の配列の値が見つかると、その値が保存され、再計算されないため、計算が効率的になります。
「longestPalSubseq」という名前の関数は、文字列をパラメータとして受け取り、文字列を反転して、反転した文字列を渡すことで「longest_seq」関数を呼び出します。 「reverse_str」という名前の別の関数は、関数にパラメーターとして渡される文字列を逆にするために使用されます。メイン関数では、文字列が定義され、関数「longestPalSubseq」が呼び出され、出力がコンソールに表示されます。
-
文字列内の母音をカウントするJavaプログラム
以下が私たちの文字列だとしましょう- String myStr = "Jamie"; 同じ変数の母音を計算するので、変数count=0に設定します。すべての文字をループして母音を数えます- for(char ch : myStr.toCharArray()) { ch = Character.toLowerCase(ch); if(ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u
-
Pythonで最長のパリンドロームサブシーケンスの長さを見つけるプログラム
小文字の文字列sがあるとします。 sで最も長いパリンドロームサブシーケンスの長さを見つける必要があります。 したがって、入力がs =aolpeuvekylのような場合、回文は「レベル」であるため、出力は5になります。 これを解決するには、次の手順に従います- n:=sのサイズ 関数dp()を定義します。これにはi、jが必要です iがjと同じ場合、 1を返す jの場合、 0を返す それ以外の場合、 s[i]がs[j]と同じ場合、 return 2 + dp(i + 1、j-1) それ以外の場合、 dp(i + 1、j)およびdp(i、j-1)の最大値を返します