面试宝典_Python.常规算法.0002.输出任意两个字符串中最长公共子串?
2017-01-04 13:32
821 查看
面试题目:
1. 用PY实现求任意两个字符串最长的公共子串?
解题思路:
1. 先求出长度最小的字符串,然后遍历其索引,这样可以避免字符串索引溢出,然后判断对应索引的值是否相同,相同的话就加到目标字典,不同的话就更新目标字典索引,但不存储,最后再按照值长度逆向排序取出第一个元素即可.
具体实现:
1. 用PY实现求任意两个字符串最长的公共子串?
解题思路:
1. 先求出长度最小的字符串,然后遍历其索引,这样可以避免字符串索引溢出,然后判断对应索引的值是否相同,相同的话就加到目标字典,不同的话就更新目标字典索引,但不存储,最后再按照值长度逆向排序取出第一个元素即可.
具体实现:
#!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # OsChina: http://xmdevops.blog.51cto.com/ # Purpose: # """ # 说明: 导入公共模块 # 说明: 导入其它模块 def get_most_part(sstr, tstr): s_len = len(sstr) t_len = len(tstr) r = {} count = 0 # 说明: 遍历长度较小者长度防止溢出 for i in xrange(s_len if s_len <= t_len else t_len): # 说明: 如果两个字符相同则追加 if sstr[i] == tstr[i]: r.setdefault(count, []).append(sstr[i]) else: # 说明: 否则改变字典索引 count = i # 说明: 对结果集排序 value = sorted(r.itervalues(), key=lambda _: len(_), reverse=True) if not value: return '' return ''.join(value[0]) if __name__ == '__main__': print get_most_part('ayx', 'yxz')
相关文章推荐
- 利用后缀数组求字符串的最长重复子串的算法 利用二维数组求两个字符串的最长公共字串(动态规划)
- 面试经典题用JS函数写出,输出两个字符串最长的公共部分
- 今天开始学Java 查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。
- 【每天学点算法题10.15】获取两个字符串之间最长公共子串的长度
- 问题:求两个字符串的最长公共子串。 要求:输入两个字符串,输出它们的最长公共子串,包括长度。
- 问题:求两个字符串的最长公共子串。 要求:输入两个字符串,输出它们的最长公共子串,包括长度。 设计: 设计一个类 String,包括一个 len(字符串长度)和字符串指针 s。另有如下成员函数: ·
- LCS算法实现 求两个字符串中间最长的公共子串
- 实用算法实现-第 8 篇 后缀树和后缀数组 [3 两个字符串的最长公共子串]
- python实现求两个字符串的最长公共子串方法
- LCS算法找出两个字符串最长公共子串(C#实现)
- 求两个字符串的最长公共子串 python实现
- python实现求两个字符串的最长公共子串
- 算法:用数组求两个字符串最长的公共子串
- 实用算法实现-第 8 篇 后缀树和后缀数组 [3 两个字符串的最长公共子串]
- 求两个字符串最长公共子串(LCS问题) 两种思想
- 求两个字符串的最长公共子串
- 求两个字符串的最长的连续公共子串
- 求两个字符串的最长公共子串
- 求两个字符串最长公共子串LCS(其它)
- 后缀树和后缀数组 [3 两个字符串的最长公共子串]