https://leetcode-cn.com/problems/longest-common-prefix/
代码:
# -*- coding:utf-8 -*-
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if len(strs) == 0 or '' in strs:
return ''
if len(strs) == 1:
return strs[0]
res = ''
min_len = len(strs[0])
for i in range(1, len(strs)):
if len(strs[i]) < min_len:
min_len = len(strs[i])
i = 0
while True:
if i < min_len:
temp_str = strs[0][i]
else:
return res
temp_flag = True
for j in range(1, len(strs)):
if strs[j][i] != temp_str:
temp_flag = False
if temp_flag == False:
return res
else:
res += temp_str
i += 1
if __name__ == '__main__':
strs = ["cc", 'ccc']
print(Solution().longestCommonPrefix(strs))
思路:首先就是异常数据的处理,不得不说这方面我还是太弱了,基本都靠报错加异常情况 唉。首先是找出这些字符串中的最短字符串长度,然后依次遍历n个字符串,如果这一趟中字符都相等,则将这个字符添加到结果字符串中,否则直接返回res字符串。
思考:这道题,我做的时候就觉得我做的麻烦了,做完看了下评论还真是,又一个用ascii码比较的,首先说一下什么是ascii码比较。
比如 abb, aba,abac ,首先比较a,都一样,然后比较b 都一样,然后比较b,a,a,这时候显然b的ascii大于a的ascii,因此这三个字符串的最大值为abb,最小值为aba。因此我们只需比较这两个字符串前n个匹配返回即可。
def longestCommonPrefix(self, strs):
if not strs: return ""
s1 = min(strs)
s2 = max(strs)
for i,x in enumerate(s1):
if x != s2[i]:
return s2[:i]
return s1
但是这个方法只是“巧”,从运行时间上来说,并不比上面的看起来冗长的方法快。
0 条评论