가장 긴 Palindromic 하위 시퀀스(Lcs와 동일)
s
에서 s
에서 가장 긴 회문 하위 시퀀스의 길이를 찾습니다.하위 시퀀스는 나머지 요소의 순서를 변경하지 않고 일부 요소를 삭제하거나 전혀 삭제하지 않음으로써 다른 시퀀스에서 파생될 수 있는 시퀀스입니다.
예 1:
Input: s = "bbbab"
Output: 4
Explanation: One possible longest palindromic subsequence is "bbbb".
해결책:
메모이제이션 방식:
시간복잡도 : o(n*m) 및 공간복잡도 : o(n*m) + o(n) (o(n)은 사용된 추가 스택 공간임)
//intuition
/*
normal or brute force way: generate all possible subsequences and find the largest subsequence that is palindrome;
optimal approach :
Using Logic of longest common subsequence;
example : if s = bbbab, lets reverse it as r = babbb
now the we can perform longest common subsequence to get result as 3 (bbb) and that will be the required result;
*/
class Solution {
public int longestPalindromeSubseq(String s) {
//bottom up approach
StringBuilder sb = new StringBuilder();
sb.append(s);
String r= sb.reverse().toString();
int dp[][] = new int[s.length()][r.length()];
for(int row[]: dp){
Arrays.fill(row,-1);
}
return longestPalindromicSubsequence(s.length()-1,r.length()-1,s,r,dp);
}
//Memoization approach
public int longestPalindromicSubsequence(int i,int j, String a, String b,int dp[][]){
if(i<0 || j<0){
return 0;
}
if(dp[i][j]!=-1) return dp[i][j];
if(a.charAt(i)==b.charAt(j)){
return dp[i][j] = 1 + longestPalindromicSubsequence(i-1,j-1,a,b,dp);
}
return dp[i][j]= 0 + Integer.max(longestPalindromicSubsequence(i,j-1,a,b,dp),
longestPalindromicSubsequence(i-1,j,a,b,dp));
}
}
도표 접근법:
시간복잡도 : o(n*m) 공간복잡도 : o(n*m)
class Solution {
public int longestPalindromeSubseq(String s) {
//bottom up approach
StringBuilder sb = new StringBuilder();
sb.append(s);
String r= sb.reverse().toString();
int dp[][] = new int[s.length()+1][r.length()+1];
//base case
//its 1 base indexing
//lets put first row and first column as 0
for(int i = 0;i<=s.length();i++){
dp[i][0] = 0;
dp[0][i] = 0;
}
for(int i =1;i<=s.length();i++){
for(int j =1;j<=r.length();j++){
if(s.charAt(i-1)==r.charAt(j-1)){
dp[i][j] = 1 + dp[i-1][j-1];
}
else dp[i][j] = 0 + Integer.max(dp[i][j-1],dp[i-1][j]);
}
}
return dp[s.length()][r.length()];
}
}
Reference
이 문제에 관하여(가장 긴 Palindromic 하위 시퀀스(Lcs와 동일)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/prashantrmishra/longest-palindromic-subsequence-same-as-lcs-258i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)