두 개의 문자열 str1과 str2가 있다고 가정합니다. 그리고 길이가 같으므로 0개 이상의 변환을 수행하여 str1을 str2로 변환할 수 있는지 확인해야 합니다.
한 번의 변환으로 str1에서 한 문자의 모든 발생을 다른 소문자 영어 문자로 변환할 수 있습니다. str1을 str2로 변환할 수 있는지 여부를 확인해야 합니다.
따라서 입력이 str1 ="aabcc", str2 ="ccdee"와 같으면 'c'를 'e'로 변환한 다음 'b'를 'd'로 변환한 다음 'a'를 'c로 변환하여 출력이 true가 됩니다. '. 여기서 전환 순서가 중요하다는 점을 명심해야 합니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
compress() 함수를 정의합니다. 시간이 걸립니다
-
n :=s
의 크기 -
a :=새 목록
-
개수 :=1
-
범위 1에서 n까지의 i에 대해 수행
-
s[i]가 s[i-1]과 같지 않으면
-
-
개수:=1
-
-
그렇지 않으면
-
개수 :=개수 + 1
-
-
-
-
반환
-
canConvert() 함수를 정의합니다. str1, str2가 필요합니다.
-
a :=압축(str1)
-
b :=압축(str2)
-
n :=a의 크기, m :=b의 크기
-
d:=새 지도
-
n :=n의 최소값, m
-
나는 :=0
-
i
-
a[i]>b[i]가 0이 아니면
-
거짓을 반환
-
-
나는 :=나는 + 1
-
-
str2의 각 i에 대해 수행
-
i가 d에 없으면 0이 아닌 경우
-
d[i]:=1
-
-
-
26 - d의 크기가 0이 아니거나 str1이 str2와 같으면 True 반환, 그렇지 않으면 False
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution(object): def compress(self,s): n = len(s) a = [] count = 1 for i in range(1,n): if s[i]!=s[i-1]: a.append(count) count=1 else: count+=1 a.append(count) return a def canConvert(self, str1, str2): a = self.compress(str1) b = self.compress(str2) n = len(a) m = len(b) d={} n = min(n,m) i = 0 while i<n: if a[i]>b[i]: return False i+=1 for i in str2: if i not in d: d[i]=1 return True if 26-len(d) or str1 == str2 else False ob = Solution() print(ob.canConvert("aabcc", "ccdee"))
입력
"aabcc", "ccdee"
출력
True