python - 在Python中查找两个字符串之间的共同字母

标签 python string letters

对于家庭作业,我必须获取 2 个用户输入的字符串,并找出有多少个常见字母(在两个字符串的相同位置),并找到常见字母。例如,对于两个字符串 ' cat' 和 'rat',有 2 个公共(public)字母位置(本例中为位置 2 和 3),公共(public)字母也是 2,因为 'a' 找到了 1 个,'t' 也找到了一次..

所以我编写了一个程序并且运行良好,但是后来我的老师用更多示例更新了作业,特别是带有重复字母的示例,而我的程序不适用于该程序。例如,使用字符串“ahahaha”和'huhu' - 相同位置有 0 个公共(public)字母,但它们之间有 3 个公共(public)字母(因为字符串 2 中的 'h' 在字符串 1 中出现了 3 次..)

我的整个问题是,如果“h”在第一个字符串中出现多次,我不知道如何计算,而且我不知道如何不检查 huhu 中的第二个“h”,因为它应该只计算唯一字母,因此总体常见字母数应为 2..

这是我当前的代码:

S1 = input("Enter a string: ")
S2 = input("Enter a string: ")
i = 0
big_string = 0
short_string = 0
same_letter = 0
common_letters = 0

if len(S1) > len(S2):
    big_string = len(S1)
    short_string = len(S2)
elif len(S1) < len(S2):
    big_string = len(S2)
    short_string = len(S1)
elif len(S1) == len(S2):
    big_string = short_string = len(S1)

while i < short_string:
    if (S1[i] == S2[i]) and (S1[i] in S2):
        same_letter += 1
        common_letters += 1
    elif (S1[i] == S2[i]):
        same_letter += 1
    elif (S1[i] in S2):
        common_letters += 1
    i += 1

print("Number of positions with the same letter: ", same_letter)
print("Number of letters from S1 that are also in S2: ", common_letters)

所以这段代码适用于没有公共(public)字母的字符串,但是当我尝试将它与“ahahaha”和“huhu”一起使用时,我得到 0 个公共(public)位置(这是有道理的)和 2 个公共(public)字母(当它应该是 3 个时)。 .我想如果我尝试添加以下内容可能会起作用:

while x < short_string:
    if S1[i] in S2[x]:
        common_letters += 1
    else:
        pass
    x += 1

但是这也不起作用......

我并不要求直接答案或代码来执行此操作,因为我想自己执行此操作,但我只需要一些提示或想法如何执行此操作..

注意:我不能使用我们在类里面没有学过的任何函数,并且在类里面我们只完成了基本的循环和字符串..

最佳答案

您需要一个像multidict这样的数据结构。据我所知,标准库中最相似的数据结构是来自集合Counter

对于简单的频率计数:

>>> from collections import Counter
>>> strings = ['cat', 'rat']
>>> counters = [Counter(s) for s in strings]
>>> sum((counters[0] & counters[1]).values())
2

使用索引计数:

>>> counters = [Counter(zip(s, range(len(s)))) for s in strings]
>>> sum(counters[0] & counters[1].values())
2

对于您的示例 ahahahahuhu,您应该分别得到 20,因为我们得到两个h 但位置错误。

由于您无法使用高级构造,因此您只需使用数组模拟计数器即可。

  • 创建 26 个元素的数组
  • 循环字符串并更新每个字母的相关索引
  • 同时再次循环遍历数组并对各个索引的最小值求和。

关于python - 在Python中查找两个字符串之间的共同字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25979084/

相关文章:

python - Python不检测单个字母,但是可以检测两个字母

python - 在Windows中安装Jupyter Notebook

python - map() 作为类成员与 map() 作为独立函数?

java - 如何将数字字符串转换为不同的 ArrayList

java - 1000位字符串,不使用数组求最大5位

regex - 仅匹配正则表达式中的字母的最佳方法是什么?

button - JavaFX 按钮文本中的彩色单个字母

python - 如何匹配异构的空白字符序列?

python - 何时以及多久在 python 中计算属性?

python - 在包含整数和字符串混合的数据框中查找最小/最大值