[LeetCode]#14 Longest Common Prefix

一、题目

Write a function to find the longest common prefix string amongst an array of strings.

 

二、解析

题目是要找到一个str的list中,所有元素最长的公共前缀。例如she, shanghai, s的公共前缀是s。

我的想法是,既然找公共前缀(longest),那么它在list所有元素中是肯定存在的,并且是在前面的。所以,我们只需比较longst是否等于元素的前[:len(longest)]即可。、如果相等,那么就说明longest也是当前元素的公共前缀;如果不相等,说明实际的前缀是短的,就将longest最后一个字母删除,再进行比较。直到与当前元素相同,或者longest变为空为止。

挺简单的。

 

三、代码

 1 class Solution:
 2     # @param {string[]} strs
 3     # @return {string}
 4     def longestCommonPrefix(self, strs):
 5         #in thie problem, we need to find the longest common prefix
 6         #i set the result string <str>longest to store the common prefix
 7         #first I let longest = strs[0], and to compare each strs[i], do "-" operation
 8         #eg:strs=['she', "shanghai", "super"]
 9         #round0: longest = "she", len=3
10         #round1: "she" != "shanghai"[:3], so cut the last one in longest
11         #        longest = "sh", len=2
12         #        "sh" == "shanghai"[:2],ok ,the next
13         #round2: "sh" != "shper"[:2], cut the last one in longest
14         #        longest = "s", len=1
15         #        "s" == super[:1], ok, return longest = "s"
16         length = len(strs)
17         if length == 0:
18             return ""
19         elif length == 1:
20             return strs[0]
21         else:
22             longest = strs[0]
23             for i in range(1, length):
24                 if strs[i] == "":
25                     return ""
26                 else:
27                     while longest != strs[i][:len(longest)]:
28                         len_longest = len(longest)
29                         longest = longest[:len_longest - 1]
30                         if longest == "":
31                             return ""
32             return longest

 

四、总结

在思考解法的时候,又有一段时间陷入了循环空想。静下心来,一点一点分析,自己不糊弄自己,想清楚细节,这样很快就跳出来,理清了思路。A了这道题到没有很开心,这个跳出来的过程我倒是很享受,哈哈~~

posted @ 2015-08-12 11:09  面包包包包包包  阅读(88)  评论(0编辑  收藏  举报