Shortest Common Super-sequence Leetcode(Lcs 문자열과 동일)
10201 단어 javadpalgorithms
문자열 s는 문자열 t에서 몇 개의 문자(아마도 0)를 삭제하면 문자열 s가 되는 경우 문자열 t의 하위 시퀀스입니다.
예 1:
Input: str1 = "abac", str2 = "cab"
Output: "cabac"
Explanation:
str1 = "abac" is a subsequence of "cabac" because we can delete the first "c".
str2 = "cab" is a subsequence of "cabac" because we can delete the last "ac".
The answer provided is the shortest such string that satisfies these properties.
해결책:
시간복잡도는 최장공통서열과 동일
즉, O(m*n) , dp 배열을 사용하는 경우 공간 복잡도는 O(m*n) 입니다.
class Solution {
String str = "";
public String shortestCommonSupersequence(String str1, String str2) {
int dp[][] = new int[str1.length()+1][str2.length()+1];
for(int i=0;i<=str1.length();i++){
dp[i][0] =0;
}
for( int i =0;i<=str2.length();i++){
dp[0][i] = 0;
}
for( int i =1;i<=str1.length();i++){
for(int j =1;j<=str2.length();j++){
if(str1.charAt(i-1)==str2.charAt(j-1)){
dp[i][j] = 1 + dp[i-1][j-1];
}
else dp[i][j] = Integer.max(dp[i][j-1],dp[i-1][j]);
}
}
int p = str1.length(), q = str2.length();
while(p>0 && q>0){
if(str1.charAt(p-1) == str2.charAt(q-1)){
str = str1.charAt(p-1)+ str;
p--;
q--;
}
else if(dp[p][q-1] > dp[p-1][q]){
str = str2.charAt(q-1) + str;
q--;
}
else {
str = str1.charAt(p-1) + str;
p--;
}
}
while(p>0){
str = str1.charAt(p-1)+ str;
p--;
}
while(q>0){
str = str2.charAt(q-1) + str;
q--;
}
return str;
}
}
Reference
이 문제에 관하여(Shortest Common Super-sequence Leetcode(Lcs 문자열과 동일)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/prashantrmishra/shortest-common-super-sequence-leetcode-same-as-lcs-string-24g0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)