黑马程序员技术交流社区
标题:
字符串数组最长公共序列,了解一下?
[打印本页]
作者:
郑成功
时间:
2018-7-30 23:31
标题:
字符串数组最长公共序列,了解一下?
编写一个函数查找字符串数组中最长的公共前缀。
如果不存在公共前缀,则返回空字符串 "" 。
["apple", "append, "apologize"]
==>
"fl"
["dog", "animals", "cat"] ==> ""
这是我最近在LeetCode上发现的一道题,感觉还挺有意思的,在这里分享给大家^-^
当时拿到手,想了半天,实在没有太好的解决方法,只能用暴力解决了。
话不多说,跟大家分享一下我的思路:
1.
定义一个字符串变量str,初始值为空,用于下面记录公共前缀
2.
将列表中的第一个字符串
str[0]取
出来(其实我是想拿列表中长度最短的字符串,不会,唉......)
3.
定义一个整型变量a=len(str[0]),外层for循环用于遍历str[0]长度,用i表示
4.
for循环嵌套,内层for循环用于遍历列表长度,用j表示
5.
if判断: str[0][j] != str
[j] ==>
str[0]的第j个字符和
列表中其他字符串同位置的字符不相等==>break跳出内层循环,否则的话继续内层循环
6.
用for else结构,如果内层循环for不是通过break结束的,
就说明str[0]的第j个位置字符是公共前缀的一部分,就将该字符添加到str中去。
7.
加一个if条件判断,如果内层循环第一次执行过后,str还是一个空字符串,
说明不存在公共前缀,直接break跳出外层循环,否则的话继续执行循环体
8.
for嵌套循环执行结束,将str return出来
9.
前面提到过,因为从列表中取的是第一个字符串,并不是长度最短的,
所以,如果列表中存在长度与之相比短的,程序可能会报错,但不会影响最终结果
所以我用了try...except...结构,将主代码块放到try中,程序报错时同样会return出str,得到结果。
代码附上:(代码之前写好了,直接copy过来的)
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
try:
str = ""
a = len(strs[0])
for j in range(0, a):
for i in range(1, len(strs)):
if strs[0][j] != strs
[j]:
break
else:
str += strs[0][j]
if len(str) == 0:
break
return str
except:
return str
strs = ["flower", "flow", "flight"]
result = Solution()
result_str = result.longestCommonPrefix(strs)
这就是整个代码块了,如果各位有更好的想法,欢迎到下方来留言,大家一起讨论讨论。
谢谢观看!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2