题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""
。
思路:
1. 创建一个变量S记住字符串数组的第一个元素(索引0)。
2. 遍历后续的第2~n个元素。
3. 每次遍历时将遍历到的字符串与S的字符进行比较,如果出现不一样的字符,则将S中从当前位置往后的字符全部删除,最终结果就是字符串数组的最长公共前缀。
注:在遍历过程中如果发现任意字符串为空,则没有最长公共前缀。
以下附上实现代码:
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs.length == 1) {
return strs[0];
}
// 存在多个字符串
StringBuilder sb = new StringBuilder();
sb.append(strs[0]);
// 遍历余下字符串
for (int i = 1; i < strs.length; i++) {
char[] chars = strs[i].toCharArray();
if (chars.length == 0) {
return "";
}
if (chars.length < sb.length()) {
// 如果遍历到的字符串小于当前最长前缀,可以直接将最长前缀减至当前字符串的长度
sb.delete(chars.length, sb.length());
}
// 从前往后检查当前子串是否有相同前缀
for (int j = 0; j < sb.length() && j < chars.length; j++) {
if (chars[j] != sb.charAt(j)) {
// 第j个字符不相等
sb.delete(j, sb.length());
break;
}
}
}
return sb.toString();
}
}