繁体   English   中英

以两个单词获得普通字母而无需重复

[英]To get the common letters in two words without repetition

编写函数getCommonLetters(word1, word2) ,该函数将两个单词作为参数并返回一个新字符串,其中包含两个字符串中都包含的字母。 忽略重复的字母,并按字母顺序对结果进行排序。

例子

>>> getCommonLetters('apple','google')
'el'
>>> getCommonLetters('microsoft','apple')
''
>>> getCommonLetters('microsoft','google')
'o'

我的解决方案如下:

def getCommonLetters(word1, word2):

    for letter in word1:
       if letter in word2:
            #return letter
            return ''.join(sorted(letter))
    return '' 

您可以使用set()和set相交找到两个集合的共同元素-

def getCommonLetters(word1, word2):
    return ''.join(sorted(set(word1) & set(word2)))

&用于set intersection


示例/演示-

>>> def getCommonLetters(word1, word2):
...     return ''.join(sorted(set(word1) & set(word2)))
...
>>> getCommonLetters('apple','google')
'el'
>>> getCommonLetters('microsoft','apple')
''

您可以使用设置交集

>>> ''.join(set('apple').intersection(set('google')))
'el'

该功能可以定义为

def getCommonLetters(a, b):
    return ''.join(sorted(set(a).intersection(set(b))))

>>> def getCommonLetters(a, b):
...         return ''.join(sorted(set(a).intersection(set(b))))
... 
>>> getCommonLetters('google','apple')
'el'

如果您想更正您的解决方案,那么问题是您返回找到的第一个普通字母。 您必须继续搜索常见字母并将它们组合为结果:

def getCommonLetters(word1, word2):
   res = ""

   for letter in word1:
      if letter in word2:
         if letter not in res: # skip if we already found it
             # don't return yet, but rather accumulate the letters
             res = res + letter

   return res

建议使用set的解决方案可以更快,尤其是在检查长单词时。

>>> ''.join(sorted(set([letter for letter in word1 if letter in word2])))

说明:

  1. [letter for letter in word1 if letter in word2] :迭代word1的字母,并检查word2是否包含当前字母。 如果是这样,请将其添加到常用字母列表(含重复项)中。
  2. set( 1. ) :通过在常用字母列表之外创建一个set来删除重复项。
  3. sorted( 2. ) :按字母顺序对常用字母进行排序。
  4. ''.join( 3. ) :创建一个字符串,用空格将普通字母连接起来(不重复)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM