r=str1[i:j+1] 这是赋值语句啊!!!!!! 你这么写必然只能保留一组啊,因为后来符合条件的数据就会把前面已经存在的数据冲掉了。(就是r已经指向了新的内存地址了,跟原来的字符串说88了。) 既然你定义的是list类型,那完全可以改写成 r.append(str1[i:j+1]) 这样每次有符合条件的就添加,而不是重新赋值~~~~~ 可以尝试一下。 |
我也是小白一只。不过写了一个你可以试试看。 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" |