题目

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 “”.

在一组给出的字符串里面,找出最长的相同前缀。如果没有相同的前缀,返回""

解法

解法1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
func longestCommonPrefix(strs []string) string {
	if len(strs) == 0 {
		return ""
	}
	if len(strs) == 1 {
		return strs[0]
	}

	n := 0
	end := false
	for !end {
		for i := 0; i < len(strs)-1; i++ {
			if n == len(strs[i]) || n == len(strs[i+1]) {
				end = true
				break
			}
			if strs[i][n] != strs[i+1][n] {
				end = true
				break
			}
		}
		if !end {
			n++
		}
	}

	return strs[0][:n]
}

解法2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
func longestCommonPrefix2(strs []string) string {
	if strs == nil || len(strs) == 0 {
		return ""
	}
	pre := strs[0]
	for _, v := range strs {
		for !strings.HasPrefix(v, pre) {
			pre = pre[:len(pre)-1]
		}
	}
	return pre
}

总结

  • 解法2里面,使用了golang的strings自带的判断前缀的方法