인터리빙 문자열
s1
, s2
및 s3
에서 s3
가 s1
및 s2
의 인터리빙에 의해 형성되는지 확인합니다.두 문자열
s
및 t
의 인터리빙은 다음과 같이 비어 있지 않은 하위 문자열로 분할되는 구성입니다.s = s1 + s2 + ... + sn
t = t1 + t2 + ... + tm
|n - m| <= 1
s1 + t1 + s2 + t2 + s3 + t3 + ...
또는 t1 + s1 + t2 + s2 + t3 + s3 + ...
입니다.참고:
a + b
는 문자열 a
및 b
의 연결입니다.예 1:
입력: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
출력: 참
예 2:
입력: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
출력: 거짓
예 3:
입력: s1 = "", s2 = "", s3 = ""
출력: 참
제약:
0 <= s1.length, s2.length <= 100
0 <= s3.length <= 200
s1
, s2
및 s3
는 영문 소문자로 구성됩니다. 후속 작업: 추가 메모리 공간
O(s2.length)
만 사용하여 문제를 해결할 수 있습니까?해결책:
class Solution:
def isLeave(self, s1, s2, s3, i, j, k, m, n, p):
if (i, j, k) in self.cache:
return self.cache[(i,j,k)]
if i >= m or j >= n or k >= p:
if i >= m:
res = s2[j:] == s3[k:]
self.cache[(i,j,k)] = res
return res
if j >= n:
res = s1[i:] == s3[k:]
self.cache[(i,j,k)] = res
return res
self.cache[(i,j,k)] = False
return False
if s1[i] == s3[k] and self.isLeave(s1, s2, s3, i + 1, j, k + 1, m, n, p):
self.cache[(i,j,k)] = True
return True
if s2[j] == s3[k] and self.isLeave(s1, s2, s3, i, j + 1, k + 1, m, n, p):
self.cache[(i,j,k)] = True
return True
self.cache[(i,j,k)] = False
return False
def isInterleave(self, s1: str, s2: str, s3: str) -> bool:
m = len(s1)
n = len(s2)
p = len(s3)
self.cache = {}
return self.isLeave(s1, s2, s3, 0, 0, 0, m, n, p)
Reference
이 문제에 관하여(인터리빙 문자열), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/interleaving-string-3pjn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)