题目:
示例:
思路:说一下我最开始的思想,最开始我想的是能不能将数组中的各个字符串取出来,然后将其转换为char[]数组,再定义三个指针,同时遍历三个数组,这样就可以找到最长的公共前缀了。但是后来一想,有个问题没办法解决,那就是数组中的字符串个数是不定的,也就是说数组中字符串长度是两个,我需要定义两个变量来接收这个字符串,同时也需要定义两个指针来同时遍历这两个字符串,如果数组中有三个字符串,我就需要三个变量和三个指针。
所以我换了一个思路,我用前一个字符串和下一个字符串进行比较,比较后的结果当成新的字符串,继续和下一个待比较的字符串进行比较。这样,我们就不需要考虑字符串数组中字符串的个数了。
代码实现:
class Soultion{
public String longestCommonPrefix(String[] strs){
// 字符串数组为空时,返回""
if(strs==null || strs.length<1) return "";
// 字符串数组中只有一个元素时,返回当前元素
if(strs.length==1) return strs[0];
// 定义一个基准元素
String tmp = strs[0];
// 定义目标字符串。
String tag = "";
// 外层for循环控制比较次数
for(int i = 1; i < strs.length;i++){
int compareLength = tmp.length() > strs[i].length()? strs[i].length:tmp.length();
// 内层for循环控制 字符串与字符串之间的比较(也就是寻找公共前缀)
for(int j = 0; j< compareLength;j++){
tag = "";
// 有相同前缀的话,拼接
if(tmp.charAt(j) == strs[i].charAt(j)){
// 拼接
tag += tmp.charAt(i);
// 否则,跳出内层for循环,表示当前找到的公共前缀是最长的。
}else{
break;
}
}
// 将当前公共前缀作为新的字符串,从而进行下一次比较。
tmp = tag;
}
return tag;
}
}