a = raw_input("Haystack ")
b = raw_input("Needle ")
common = {}
if len(a)<len(b):
for letter in a:
if letter in b:
common[letter]= 1
else:
for letter in b:
if letter in a:
common[letter]= 1
print (len(common))
我不知道如何阅读不重叠的字母。如果用户输入haystack“qqwwee”和needle“qw”,那么它必须输出1而不是2,因为haystack中只有一个“qw”。
你的代码目前正在计算两个字符串之间 存在的 共同字母的数量,而不是不重叠出现的数量。为了计算不重叠出现的数量,你需要跟踪你在 haystack 字符串中匹配时使用的字母。
这是一个 Python 代码,展示了如何做到这一点:
a = input("Haystack: ") # 使用 input() 获取 Python 3 中的输入
b = input("Needle: ")
common_count = 0
used_letters = set() # 使用集合跟踪已使用的字母
needle_index = 0
for letter in a:
if letter == b[needle_index] and letter not in used_letters:
common_count += 1
used_letters.add(letter) # 将字母标记为已使用
needle_index += 1
if needle_index == len(b): # 如果找到了所有 needle 字母,则中断
break
print(common_count)
它是如何工作的:
- 初始化:
-
common_count
:从 0 开始,用于计算不重叠匹配的数量。 -
used_letters
:一个集合(用于存储唯一元素),用于跟踪 haystack 中已使用的字母,确保不重复计算。 -
needle_index
:从 0 开始,跟踪当前在 needle 字符串中的位置。 -
迭代 haystack 字符串:
-
对于 haystack 中的每个
letter
,检查它是否与needle
字符串中needle_index
位置的当前字母匹配。 -
如果匹配 且
letter
以前没有使用过(不在used_letters
中):-
增加
common_count
(找到一个不重叠的匹配项)。 -
将
letter
添加到used_letters
中以将其标记为已使用。 -
增加
needle_index
以移动到needle
字符串中的下一个字母。 -
如果
needle_index
达到needle
的长度,这意味着已找到所有 needle 字母,循环将中断。
-
增加
-
打印结果:
-
最后,打印
common_count
,它表示 haystack 和 needle 字符串之间不重叠匹配的总数。
使用你的示例 "qqwwee" 和 "qw",此代码将正确输出
1
,因为它只找到 "qw" 的一个不重叠出现。