给定一个随机的字符串数组,查找这些字符串元素的公共前缀字符串,如果没有则返回空串。其中,字符串数组中的元素都是由小写字母a-z之间随机组合而成。例如:
输入:["flower","flow","flight"]
输出:"fl"
输入: ["dog","racecar","car"]
输出: ""
输入:["c"]
输出:"c"
分析
第一步:获取数组的第一个元素first。
第二步:截取first字符串的0-1位,判断数组从第二个元素到最后一个元素是否都能匹配到截取的字符串,匹配到count就加1,如果count最后的值和数组除掉第一个元素后的长度相等,则是共有前缀。
第三步:如果第二步成功匹配上,则截取first字符串的0-2位,重复第二步的判断逻辑。
//Java实现
public static String longestCommonPrefix(String[] strs) {
String result = "";
if (strs.length == 0) {
return "";
}
if (strs.length == 1) {
return strs[0];
}
String first = strs[0];//获取第一个元素
for (int i = 1; i <= first.length(); i++) {
String prefix = first.substring(0, i);
int count = 0;
for (int j = 1; j < strs.length; j++) {
if (strs[j].indexOf(prefix) == 0) {
count++;
}
}
if (count != 0 && count == strs.length - 1) {
result = prefix;
}
}
return result;
}
//Kotlin实现
fun longestCommonPrefix(strs: Array<String>): String {
var result = ""
if (strs.size == 0) {
return ""
}
if (strs.size == 1) {
return strs[0]
}
val first = strs[0]
for (i in 1..strs.size) {
var prefix = first.substring(0, i+1)
var count = 0
for (j in 1..strs.size-1) {
if (strs[j].indexOf(prefix)==0){
count++
}
}
if (count!=0&&count==strs.size-1){
result= prefix
}
}
return result
}
网友评论