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 条评论