问题
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string “”.
Example 1:
Input: strs = [“flower”,“flow”,“flight”]
Output: “fl”
Example 2:
Input: strs = [“dog”,“racecar”,“car”]
Output: “”
Explanation: There is no common prefix among the input strings.
Constraints:
- 1 <= strs.length <= 200
- 0 <= strs[i].length <= 200
- strs[i] consists of only lower-case English letters.
二、解析
Go 解法:
解法一:
func longestCommonPrefix(strs []string) string {
if len(strs) == 0 {
return ""
}
if len(strs) == 1 {
return strs[0]
}
for idx := 0; ; idx++ {
for i := 0; i < len(strs)-1; i++ {
if idx > len(strs[i]) || idx > len(strs[i+1]) {
return strs[0][0 : idx-1]
}
if strs[i][0:idx] != strs[i+1][0:idx] {
return strs[0][0 : idx-1]
}
}
}
}
解法二:
func longestCommonPrefix(strs []string) string {
if len(strs) == 0 {
return ""
}
if len(strs) == 1 {
return strs[0]
}
sort.Strings(strs)
str1 := strs[0]
str2 := strs[len(strs) - 1]
ans := str1
minLen := 0
if len(str1) < len(str2) {
minLen = len(str1)
} else {
minLen = len(str2)
}
for i := minLen; i > 0; i-- {
if (strings.HasPrefix(str2, ans[0 : i])) {
return ans[0 : i]
}
}
return ""
}