假设我们有一个称为单词的小写字母字符串列表,我们必须找到两个不共享共同字母的不同单词的最大长度总和。因此,如果输入类似于单词= [“ abcd”,“ mno”,“ abdcmno”,“ amno”],则输出将为7,因为不共享任何常见字母的单词是[“ abcd”,“ mno“],总长度为7。
为了解决这个问题,我们将遵循以下步骤-
定义一个功能sign()
。这将成为事实
值:= 0
对于单词中的每个c
值:=值或(2 ^(c的ASCII-'a'的ASCII))
返回值
在主要方法中,执行以下操作
签名:=单词中每个x带有符号(x)的列表
回答:= 0
对于范围在0至字数范围内的我,
如果签名[i]和签名[j]等于0,则
ans:= ans的最大值和单词的大小[i] +单词的大小[j]
对于范围i + 1到字长的j
返回ans
让我们看下面的实现以更好地理解-
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