public String longestCommonPrefix(String[] strs) {
if (strs.length == 0 ){
return "";
}else if (strs.length == 1){
return strs[0];
}
int minLen = Integer.MAX_VALUE;
int k = 0;
char[][] chars = new char[strs.length][];
for ( int i = 0; i < strs.length; i++){ // 找到最小的长度
chars[i] = strs[i].toCharArray();
if (minLen > strs[i].length()){
minLen = strs[i].length();
k = i; // 找到最小串的位置
}
}
int sum = 0;
boolean flat = true;
for (int i = 0; (i < minLen ) && flat == true; i++){
for (int j = 0; j < strs.length; j++){
if (chars[k][i] != chars[j][i] ){ // 最小长度的某个字母和其他的那个位置的字母不同
flat = false;
break;
}
}
sum ++;
}
if (sum > 0 && sum <= chars[k].length && flat == false){ // 如果存在最长前缀, 非自然中断的情况
return new String(chars[k], 0, sum - 1); // 减一是因为它是在程序中间终止,但是sum还是加了一,要回来
}
if (sum == chars[k].length && flat == true){ // 显然最小串整个都是前缀,直接返回即可, 并且是这种自然终止["c","c"]而不是这种["a","c"]被迫终止的
return strs[k];
}
return "";
}
最长公共前缀
最新推荐文章于 2024-11-28 09:44:20 发布