길이가 같은 두 개의 문자열 s와 t가 있다고 가정합니다. 문자열에서 두 개의 인덱스를 선택하고(반드시 다를 필요는 없음) 선택한 인덱스에서 문자를 교환하는 작업을 고려하십시오. 정확히 하나의 문자열에 대해 최대 한 번의 문자열 스왑을 수행하여 두 문자열을 동일하게 만드는 것이 가능한지 여부를 확인해야 합니다.
따라서 입력이 s ="hello" t ="hlelo"와 같으면 출력은 True가 됩니다. 왜냐하면 s 또는 t에서 'e'와 'l'을 바꿔서 동일하게 만들어야 하기 때문입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
max_diffs:=2
-
차이:=0
-
st :=새로운 세트
-
st2 :=새로운 세트
-
범위 0에서 s까지의 i에 대해
-
s[i]가 t[i]와 같지 않으면
-
diffs :=diffs + 1
-
-
s[i]가 st에 없으면
-
s[i]를 st
에 삽입
-
-
t[i]가 st2에 없으면
-
t[i]를 st2에 삽입
-
-
diff> max_diffs인 경우
-
거짓을 반환
-
-
-
(diffs가 0과 같거나 diffs가 2와 같거나) st의 크기가 st2의 크기와 같고 st가 st2와 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
def solve(s, t): max_diffs=2 diffs=0 st = set() st2 = set() for i in range(len(s)): if s[i] != t[i]: diffs+=1 if s[i] not in st: st.add(s[i]) if t[i] not in st2: st2.add(t[i]) if diffs > max_diffs: return False return (diffs == 0 or diffs == 2) and len(st) == len(st2) and st == st2 s = "hello" t = "hlelo" print(solve(s, t))
입력
"hello", "hlelo"
출력
True