gpt4 book ai didi

python - 在 Python 中查找两个字符串之间的公共(public)字母

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:56 25 4
gpt4 key购买 nike

对于家庭作业,我必须获取 2 个用户输入的字符串,并计算出有多少个字母是共同的(在两个字符串的相同位置),以及找到共同的字母。例如对于两个字符串 ' cat'和'rat',共有2个常用字母位置(在本例中为位置2和3),并且常用字母也是2,因为'a'找到了一个,'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)

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

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

但是这也不管用...

我不要求直接的答案或一段代码来做到这一点,因为我想自己做,但我只需要一些提示或想法如何做到这一点..

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

最佳答案

你需要一个像multidict这样的数据结构。据我所知,标准库中最相似的数据结构是 collections 中的 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 中查找两个字符串之间的公共(public)字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25979084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com