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

Python에서 문자열을 다른 문자열로 변환

<시간/>

두 개의 문자열 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