[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了这道题到没有很开心,这个跳出来的过程我倒是很享受,哈哈~~