가장 긴 Palindromic 하위 시퀀스의 경우 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라는 클래스에는 두 개의 문자열과 두 개의 문자 배열을 선언하는 'longest_seq' 함수가 포함되어 있습니다. 배열은 반복되고 동적 프로그래밍 기술을 사용하여 가장 긴 회문 시퀀스가 발견됩니다. 이 방법은 특정 배열에 대한 값을 찾으면 저장되고 다시 계산되지 않으므로 계산이 효율적입니다.
'longestPalSubseq'라는 이름의 함수는 문자열을 매개변수로 받아 문자열을 반전시키고 반전된 문자열을 전달하여 'longest_seq' 함수를 호출합니다. 'reverse_str'이라는 또 다른 함수는 함수에 매개변수로 전달된 문자열을 반전시키는 데 사용됩니다. 메인 함수에서 문자열을 정의하고 'longestPalSubseq' 함수를 호출하여 콘솔에 출력을 표시합니다.