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

문자열에 Python에서 허용되는 하나의 변형으로 동일한 빈도의 모든 문자가 있는지 확인하십시오.

<시간/>

소문자 문자열 s가 있다고 가정하고 최대 1자를 삭제하여 s를 유효한 문자열로 변환할 수 있는지 확인해야 합니다. 여기서 유효한 문자열은 str의 모든 고유 문자에 대해 각 문자의 빈도가 동일하도록 문자열 str을 의미합니다.

따라서 입력이 s ="xyyzx"와 같으면 z를 삭제할 수 있으므로 출력은 True가 되고 문자열은 x와 y의 발생이 동일한 "xyyx"가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 크기:=26
  • occurrence :=크기가 26인 배열. 각 문자의 빈도를 s
  • 에 저장합니다.
  • occr1 :=0
  • occr1_cnt :=0
  • 0에서 크기 - 1 사이의 i에 대해
    • 발생[i]이 0이 아니면
      • occr1 :=발생[i]
      • occr1_cnt :=1
      • 루프에서 나오다
  • occr2 :=0
  • occr2_cnt :=0
  • i+1~크기 - 1 범위의 j에 대해
    • 발생[j]이 0이 아니면
      • 발생[j]이 occr1과 같으면
        • occr1_cnt :=occr1_cnt + 1
      • 그렇지 않으면
        • occr2_cnt :=1
        • occr :=발생[j]
        • 루프에서 나오다
  • 범위 j+1에서 크기 - 1까지의 k에 대해
    • 발생[k]가 0이 아니면
      • 발생[k]가 occr1과 같으면
        • occr1_cnt :=occr1_cnt + 1
      • 발생[k]가 occr2와 같으면
        • occr2_cnt :=occr2_cnt + 1
      • 그렇지 않으면
        • 거짓을 반환
    • occr1_cnt> 1 및 occr2_cnt> 1이면
      • 거짓을 반환
  • 참 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

size = 26
def solve(str):
   occurrence = [0]*size
   for i in range(len(str)): occurrence[ord(str[i])-ord('a')] += 1
      occr1 = 0
      occr1_cnt = 0
      for i in range(size):
         if (occurrence[i] != 0):
            occr1 = occurrence[i]
            occr1_cnt = 1
            break
   occr2 = 0
   occr2_cnt = 0
   for j in range(i+1,size):
      if (occurrence[j] != 0):
         if (occurrence[j] == occr1):
            occr1_cnt += 1
         else:
            occr2_cnt = 1
            occr = occurrence[j]
            break
   for k in range(j+1,size):
      if occurrence[k] != 0:
         if (occurrence[k] == occr1):
            occr1_cnt += 1
      if (occurrence[k] == occr2):
         occr2_cnt += 1
      else:
         return False
      if occr1_cnt > 1 and occr2_cnt > 1:
         return False
   return True
s = "xyyzx"
print(solve(s))

입력

"xyyzx"

출력

True