计算Python中两个字符串之间的共同字符

问题描述 投票:0回答:3

我有一个一直在编写的代码,但它的输出效果没有我需要的那么好。我必须用 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))
python character
3个回答
1
投票

因此,您的代码的问题之一是您计算字符出现次数的方式,如果您执行“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))

0
投票
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)

0
投票

您可以使用 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)
© www.soinside.com 2019 - 2024. All rights reserved.