2015-07-31 4 views
-1

Запишите функцию 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 '' 
+0

Где проблема? –

+0

Я получаю некоторые неправильные выходы –

ответ

1

Вы можете использовать set intersection

>>> ''.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' 
+0

Я не хочу ответа в виде списка. –

+1

@hermankaur Он находится в форме строки. Пожалуйста, выполните код –

+0

ok..It работал так! –

2

вы можете использовать set() и установить пересечение найти общие элементы двух множеств -

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

& для set intersection.


Пример/Demo -

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

Большое спасибо. –

0
>>> ''.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.): Удалите дубликаты, создав набор из списка общих букв.
  3. sorted(2.): Сортировка общих букв (в алфавитном порядке).
  4. ''.join(3.): Создайте строку, соединяющую общие буквы пробелами (без дубликатов).
+0

Этот ответ был бы более полезен, если бы вы могли добавить какое-то объяснение, почему оно работает. – shoover

1

Если вы хотите исправить свое решение, проблема в том, что вы возвращаете первую общую букву, которую вы найдете. Вы должны продолжать поиск общих букв и объединить их в результате:

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 может быть быстрее, особенно, если вы проверяете длинные слова.

Смежные вопросы