Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python을 사용하여 하나의 문자열 스왑이 문자열을 같게 만들 수 있는지 여부를 확인하는 프로그램

<시간/>

길이가 같은 두 개의 문자열 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