编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
代码:class Solution {
public String longestCommonPrefix(String[] strs) {
//定义了一个方法 longestCommonPrefix ,它的作用是在给定的一个字符串数组中找出最长公共前缀。
接受一个字符串数组 strs 作为参数,返回值类型是 String ,即返回一个字符串。
if (strs==null||strs.length==0){
return "";
}
int lens=strs.length,n=strs[0].length();
//定义了两个整型变量, lens 用来存储字符串数组 strs 的长度,即数组中字符串的个数; n 用来存储数组中第一个字符串 strs[0] 的长度。
int i,j;
char c;
//用于存储当前正在比较的字符。
for (i=0;i<n;i++){
c=strs[0].charAt(i);
//在每次循环中,通过 strs[0].charAt(i) 获取第一个字符串中索引为 i 的字符,并将其赋值给变量 c 。这个循环的目的是从第一个字符串的第一个字符开始,逐个检查每个字符是否是所有字符串的公共前缀部分。
for (j=1;j<lens;j++){
if (strs[j].length()==i||strs[j].charAt(i)!=c){
return strs[0].substring(0,i);
//这段代码的作用是:逐个检查所有字符串的第 i 个字符是否与基准字符 c 相同。如果发现某个字符串的长度不够(即第 i 个字符不存在),或者字符不匹配,则立即返回当前找到的最长公共前缀。
- 条件一: strs[j].length() == i
当前字符串长度不够,无法匹配到第 i 个字符,说明公共前缀只能到 i-1 位置。
比如检查第 i=3 个字时,发现某个朋友名字只有2 个字(如「张小」),那第 3 个字不存在
- 条件二: strs[j].charAt(i) != c
字符不匹配,公共前缀只能到 i-1 位置。
逻辑关系: || (或)
- 只要满足任意一个条件,就触发返回。
substring
- substring(0,i) :截取第一个字符串 strs[0] 从索引 0 到 i-1 的子串(因为 Java 的 substring 是左闭右开)。
- 举例:如果 i=2 ,则返回前两个字符(索引 0 和 1 )。
}
}
}
return strs[0];
如果外层循环顺利结束(即没有提前返回),说明第一个字符串的所有字符都是所有字符串的公共前缀,所以直接返回第一个字符串 strs[0] 。
}
}
总结
这段代码通过两层嵌套的 for 循环,以第一个字符串为基准,逐个字符地检查其他字符串,从而找出字符串数组中的最长公共前缀。在检查过程中,通过条件判断及时返回已经找到的最长公共前缀。