问题描述:
编写一个函数来查找字符串数组中的最长公共前缀。
样例输入:
["abca","abc","abca","abc","abcc"]
样例输出:
"abc"
代码:
public static void main(String[] args) {
// 测试
Scanner sc = new Scanner(System.in);
System.out.println("Please input five strings !");
String[] strings = new String[5];
while(true){
for (int i=0; i<5; i++){
strings[i] = sc.next();
}
System.out.println(maxPreStr(strings));
}
}
// 求一个字符串数组的各个字符串的最长公共前缀
private static String maxPreStr(String[] strs){
// 判断strs是否合法
if(strs.length<=0){
return "";
}
StringBuilder sb = new StringBuilder();
for (int i=0; i<strs[0].length(); i++){ // i的取值范围是strs数组中第一个字符串的长度
char c = strs[0].charAt(i); // 逐个读取第一个字符串的字符
for (int j=1; j<strs.length; ){ // 从数组中的第二个字符串开始比较
// 判断下一个字符串的长度是否合法,防止字符串长度越界,读取除第一个字符串之后的字符串的第一个字符
if(strs[j].length()>i && strs[j].charAt(i)==c){
j++; // 接着读取下一个字符串的字符
}else{
// 如果有字符串不满足上述条件,则将sb中的内容返回出去即可
// 判断一下sb的内容是否为空,若为空则输出 null
return sb.length()==0 ? "" : sb.toString();
}
}
sb.append(c);
}
// 输出sb中的内容
return sb.toString();
}
结果:
注意最后一行有一个空格表示“”,此时表示没有公共前缀