求公共字符

就是一个非常简单的问题,输入俩个字符串,输出他们最大的公共字符数,不区分大小写,我觉得用其他语言耿简单,但是就是Python写不出,我想求大神帮忙,我是新手,谢谢哒


请先 登录 后评论

4 个回答

Swine
python自带max函数,或用object参数
请先 登录 后评论
恋狼
我也是小白一只。不过写了一个你可以试试看。
str1 = raw_input("input first String")
str2 = raw_input("input second String")
restr1 = str1.upper()
restr2 = str2.upper()
little_len = 0
startindex = 0
endindex = 0
flag = False
targestr = ""
compstr = ""
res = []

def compar1_2(sta, end, targ):
    return targ[sta: end]

if restr1.__len__() > restr2.__len__():
    little_len = restr2.__len__()
    targestr = restr2
    compstr = restr1
else:
    little_len = restr1.__len__()
    targestr = restr1
    compstr = restr2


while endindex <= little_len:

    cutstr = compar1_2(startindex, endindex, targestr)
    if cutstr in compstr:
        res.append(cutstr)
        endindex += 1
        flag = True
        continue
    else:
        if flag:
            startindex = endindex - 1
        else:
            startindex = endindex
            endindex += 1
        flag = False
        continue

print max(map(len, res))
请先 登录 后评论
欧阳平静

我后来想了,下面是程序,有一个BUG就是如果有俩组长度一样的话它只能保留下一组
str1=raw_input().upper()
str2=raw_input().upper()
n=0
r=[]
if len(str1)>len(str2):
    for i in range(0,len(str2)):
        for j in range(len(str2)-1,i-1,-1):
            if (str2[i:j+1] in str1) and (j-i>=n):
                n=j-i
                r=str2[i:j+1]
else :
    for i in range(0,len(str1)):
        for j in range(len(str1)-1,i-1,-1):
            if (str1[i:j+1] in str2) and (j-i>=n):
                n=j-i
                r=str1[i:j+1]  
if len(r)!=0:
    print r
else:
    print "None"
请先 登录 后评论
帅哥淦

r=str1[i:j+1] 这是赋值语句啊!!!!!!
你这么写必然只能保留一组啊,因为后来符合条件的数据就会把前面已经存在的数据冲掉了。(就是r已经指向了新的内存地址了,跟原来的字符串说88了。)
既然你定义的是list类型,那完全可以改写成  r.append(str1[i:j+1])
这样每次有符合条件的就添加,而不是重新赋值~~~~~
可以尝试一下。
请先 登录 后评论
  • 4 关注
  • 0 收藏,398 浏览
  • 黄静丶 提出于 2021-08-07 15:49

相似问题