最长公共前缀
题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
思路
从前往后遍历所有字符串的每一列,比较相同列上的字符是否相同,如果相同则继续对下一列进行比较,如果不相同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀。
代码
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length==0) return "";
int len=strs.length; //用于存储字符串遍历的最小长度
//外层for循环遍历每个字符索引,注意strs[0].length长度是不断变化的
for(int i=0;i<strs[0].length();i++){
//取出单个字符,用于字符串之间的匹配
char c=strs[0].charAt(i);
//内层for循环遍历每个字符串
for(int j=0;j<len;j++){
/*当需要匹配的字符索引超过字符串的长度,
或者字符串某个位置的字符不匹配时,削减最长前缀
同时要刷新字符串遍历的最小长度len(因为超过len的部分肯定不匹配了)*/
if(i==strs[j].length() || strs[j].charAt(i)!=c){
strs[0]=strs[0].substring(0,i);
len=j;
}
}
}
//返回最长公共前缀
return strs[0];
}
}
总结
找最长公共前缀就是看每个字符串同一位置的字符是否相同,将strs[0]设为初始的最长公共前缀,然后不断去遍历每个字符
这里需要注意的两点:
- 最长公共前缀strs[0]的长度是动态变化的。
- 每个字符串的长度不一样,所以在匹配每个字符串对应位置上的字符时,需要先判定字符串的索引是否越界。