【发布时间】:2014-11-16 17:08:56
【问题描述】:
对于家庭作业,我必须获取 2 个用户输入的字符串,并找出有多少字母是共同的(在两个字符串的相同位置),以及找到共同的字母。例如对于两个字符串 ' cat' 和 'rat',有 2 个常见的字母位置(在这种情况下是位置 2 和 3),常见的字母也是 2,因为 'a' 找到了一个,'t' 也找到了一次..
所以我做了一个程序,它运行良好,但后来我的老师用更多的例子更新了作业,特别是重复字母的例子,我的程序不适合那个..例如,字符串 'ahahaha' 和'huhu' - 相同位置有 0 个常用字母,但它们之间有 3 个常用字母(因为字符串 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
然而这也不起作用......
我不是要求直接的答案或一段代码来做这件事,因为我想自己做,但我只需要一些提示或想法如何做到这一点..
注意:我不能使用我们在课堂上没有学过的任何函数,在课堂上我们只做了基本的循环和字符串..
【问题讨论】:
-
更简单的方法:创建两个数组,每个数组有 26 个条目 (a-z)。循环遍历两个字符串并将它们“库存”到两个数组中。例如“foobar”给你
a(1), b(1), f(1), o(2), r(1)。然后你遍历两个数组,看看哪些字母都有非零计数。 -
使用集合和set.intersection
-
在覆盖循环的时候,有没有覆盖enumerate()?