该程序在Python中查找非共享单词的最大长度

假设我们有一个称为单词的小写字母字符串列表,我们必须找到两个不共享共同字母的不同单词的最大长度总和。因此,如果输入类似于单词= [“ 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
    猜你喜欢