用 Python 编写程序来查找非共享 words 的最大长度
pythonserver side programmingprogramming更新于 2026/2/1 17:48:17
假设我们有一个称为 words 的小写字母字符串列表,我们必须找到两个不共享一个共同字母的不同 words 的长度之和。 因此,如果输入为 words = ["abcd", "mno", "abdcmno", "amno"],则输出将为 7,因为不共享任何共同字母的 words 为 ["abcd", "mno"],总长度为 7。
为了解决这个问题,我们将遵循以下步骤 −
- 定义一个函数 sign() 。这将获取 words
- 值 := 0
- 对于 words 中的每个 c,执行
- 值 := 值 OR (2^(c 的 ASCII - 'a' 的 ASCII))
- 返回值
- 从主方法,执行以下操作
- 签名 := 带有 sign(x) 的列表,用于 words 中的每个 x
- ans := 0
- 对于范围为 0 到 words 大小的 i,执行
- 对于范围为 i + 1 到 words 大小的 j,执行
- 如果签名 [i] 和签名 [j] 相同为 0,则
- ans := ans 的最大值和 words [i] 的大小 + words [j] 的大小
- 如果签名 [i] 和签名 [j] 相同为 0,则
- 对于范围为 i + 1 到 words 大小的 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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

