这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/107825010
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!
写在开头的话
- 请记住:实践是掌握知识的最快方法
- 如果你只是怀着看看的态度去快速浏览文章,而不去认认真真的把文章里面讲的任何一个知识点去实践一遍,那么你永远也掌握不了它
- 生命不息,折腾不止!
比较两个字符串中最大相同的字符串
00. 说明和思路
0.1 题目说明
-
比如
字符A
是whoareyou
,字符B
是hoaoooeyouwho
,那么字符A
和字符B
最大相同的字符为eyou
-
比如
字符A
是who
,字符B
是hwo
,那么字符A
和字符B
最大相同的字符为w
,h
,o
所以按照上述结果的形式编写代码
0.2 思路
- 有两个字符串,其中字符串
A
为coolmangood
,字符串B
为badcoolwoman
- 现在我们需要选出长度较小的字符串出来进行操作,那么现在这个较小的字符串为
coolmangood
- 对于较小的字符串,
coolmangood
,第一轮我们从它的第一个字符c
开始,首先查看字符c
是否在字符串B
中,发现包含在其中,然后字符c
向后进一步,变成字符串co
,接着再次查看co
是否在字符串B
中。得到结果确实也在字符B
中,然后继续向前进一步变为coo
,依次进行试探性查看,是否包含在B
中,直到最后不包含在其中为止,得到此轮最大相同长度字符串 - 继续比较第
2
轮(第二轮是从o
开始比较)、第3
轮(第三轮是从第二个o
开始比较),到第n
轮,n
取决于最小长度字符串的长度,这就是为什么要拿长度最小的字符串出来的原因 - 在之后的几轮中,依次得到该轮中最大的字符串,然后将该字符串和前一轮得到的最大长度字符串进行比较,如果比前一轮字符串长度要长,那么替换掉。如果字符串长度相同,那么则看这两个字符串内容是否相同。如果相同则不替换。如果不同则将它们两个存入
集合
中
01. 最终结果
- 代码演示
def compare_common_str(str1="", str2=""):
a = set() # 防止存入相同长度的相同字符串
result_str = "" # 存入相同长度的字符串
if len(str1) > len(str2):
str1, str2 = str2, str1 # 把较小长度的字符串存入 str1中,将str1 进行循环迭代,优化效率
for i in range(len(str1)):
sub_str = "" # 用于试探字符串最大长度
if str1[i] in str2:
sub_str = str1[i]
k = i
while True:
if k < len(str1) - 1: # 如果k走到头了就停止。
k += 1
sub_str = sub_str+str1[k] # 进一步试探是否 包含元素
if not sub_str in str2:
sub_str = sub_str[:-1]
break
else:
break
if len(sub_str) > len(result_str):
a = set()
result_str = sub_str
elif len(result_str) == len(sub_str): # 判断两个 字符是否相等
if sub_str != result_str:
a.add(result_str)
a.add(sub_str)
else:
if len(a) != 0:
return a
else:
return result_str
if __name__ == "__main__":
print(compare_common_str("whoamihowwhoamihow", "whoaoohwhoamihowoamihwh oamihow,hoamihowsdfwhoamihowaaaa"))
print(compare_common_str("wai", "iaw"))
print(compare_common_str("coolmangood", "badcoolwoman"))
- 运行结果
whoamihow
{'a', 'i', 'w'}
cool
写在最后的话:
- 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
- 欢迎关注我的CSDN博客,IDYS’BLOG
- 持续更新内容:
linux基础 | 数据通信(路由交换,WLAN) | Python基础 | 云计算 - 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
- 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!