我有一个一直在编写的代码,但它的输出效果没有我需要的那么好。我必须用 python 编写自己的算法来计算输入字符串中的字符。它就像针方法中的干草堆,但我不应该使用任何文本比较方法,例如 count() 和 findall()。我希望我的代码能够逐个字符地计数,并且不计算重叠的字母。我正在寻找最长的公共子串。到目前为止,这是我的代码,但输出仍然错误。当我在 String1 字段中输入“aaaaa”并在 String 2 字段中输入“aa”时,它输出 1,但它应该输出 2,因为“aaaaa”中有 2 个“aa”且没有重叠。
test1 = input("String1: ")
test2 = input("String2: ")
common = {}
if len(test1)<len(test2):
for letter in test1:
if letter in test2:
common[letter]= 1
else:
for letter in test2:
if letter in test1:
common[letter]= 1
print (len(common))
因此,您的代码的问题之一是您计算字符出现次数的方式,如果您执行“aaaa”和“aa”,则输出如您所说是2,但在您当前的代码中无论如何它都将是1。这是修复方法。
import re
test1 = input("String1: ")
test2 = input("String2: ")
common = {}
if len(test1) < len(test2):
for letter in test1:
if letter in test2:
common[letter] = len(re.findall(letter, test2))
else:
for letter in test2:
if letter in test1:
common[letter] = len(re.findall(letter, test1))
for word, count in common.items():
print("{0}\t{1}".format(word,count))
str1=input()
str2=input()
cnt=0
if len(str1)<len(str2):
for i in str1:
if i in str2:
cnt+=1
else:
for i in str2:
if i in str1:
cnt+=1
print(cnt)
您可以使用 Set() Datatype 使字符串仅包含唯一字符,以避免对相同字符进行两次或多次计数。
这里有一个例子:-
test1 = set(input().strip()[:]) # this makes only the unique elements are stored
test2 = set(input().strip()[:]) # for string 2 its optional you can directly use input() alone
count = 0
for ch in test1: # for every unique character
if ch in test2: # checks it is in if present count++
count+=1
print(count)