用 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] 的大小
  • 返回 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

相关文章


有用资源