2 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""
。(原题)
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
提示:
0 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
-
思路一:横向扫描
通过遍历依次对 strs 中的字符串进行比较,先比较 strs[0] 和 strs[1],将公共前缀存入字符串 ans 中,对于每个遍历到的字符串,更新最长公共前缀,与最后一个字符串进行比较(即遍历完所有字符串后)
,得到一个最长公共前缀即为最后的答案。
class Solution { public String longestCommonPrefix(String[] strs) { if (strs == null || strs.length == 0) { return ""; } String ans = strs[0]; for (int i = 1; i < strs.length; i++) { int j = 0; for (; j < ans.length() && j < strs[i].length(); j++) { if (ans.charAt(j) != strs[i].charAt(j)) { break; } } ans = strs[i].substring(0, j); } return ans; } }
(此处插播 Java String类:https://www.runoob.com/java/java-string.html)
-
思路二:纵向扫描
纵向扫描就是将 strs 中字符串的每一列进行比较,比较相同列上的字符是否相同,如果相同则继续对下一列进行比较,如果不相同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀。
class Solution { public String longestCommonPrefix(String[] strs) { if (strs == null || strs.length == 0) { return ""; } int length = strs[0].length(); int count = strs.length; for (int i = 0; i < length; i++) { char c = strs[0].charAt(i); for (int j = 1; j < count; j++) { if (i == strs[j].length() || strs[j].charAt(i) != c) { return strs[0].substring(0, i); } } } return strs[0]; } }