단어라고 하는 소문자 알파벳 문자열 목록이 있다고 가정하고 공통 문자를 공유하지 않는 두 개의 고유한 단어 길이의 최대 합을 찾아야 합니다. 따라서 입력이 단어 =["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]
- signature[i] AND signature[j]가 0과 같으면
- i + 1에서 단어 크기까지의 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