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

파이썬에서 비공유 단어의 최대 길이를 찾는 프로그램

<시간/>

단어라고 하는 소문자 알파벳 문자열 목록이 있다고 가정하고 공통 문자를 공유하지 않는 두 개의 고유한 단어 길이의 최대 합을 찾아야 합니다. 따라서 입력이 단어 =["abcd", "mno ", "abdcmno", "amno"], 단어가 공통 문자를 공유하지 않기 때문에 출력은 7이 됩니다. ["abcd", "mno"], 총 길이는 7입니다.

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

  • sign() 함수를 정의합니다. 말이 필요합니다
  • 값:=0
  • 단어의 각 c에 대해 수행
    • 값 :=값 OR (2^(c의 ASCII - 'a'의 ASCII))
  • 반환 값
  • 기본 방법에서 다음을 수행합니다.
  • signature :=단어의 각 x에 대해 부호(x)가 있는 목록
  • ans :=0
  • 0에서 단어 크기 사이의 i에 대해
    • i + 1에서 단어 크기까지의 j에 대해
      • signature[i] AND signature[j]가 0과 같으면
        • ans :=단어의 최대 크기 및 크기[i] + 단어의 크기[j]
  • 반환

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

예시

class Solution:
   def sign(self, word):
      value = 0
      for c in word:
         value = value | (1 << (ord(c) - 97))
      return value
   def solve(self, words):
      signature = [self.sign(x) for x in words]
      ans = 0
      for i in range(len(words)):
         for j in range(i + 1, len(words)):
            if signature[i] & signature[j] == 0:
               ans = max(ans, len(words[i]) + len(words[j]))
      return ans
ob = Solution()
words = ["abcd", "mno", "abdcmno", "amno"]
print(ob.solve(words))

입력

["abcd", "mno", "abdcmno", "amno"]

출력

7