文内代码全部采用JAVA语言。
题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
所有输入只包含小写字母 a-z 。
测试用例
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
个人解法
首先默认公共前缀pre为空字符串“”,按顺序取第一个字符串内的第i个字符c,判断c是不是与其余字符串的第i个字符相同,如果全部相同,则给将c连接到pre上,如果出现不一致,直接跳出最外层循环,说明该字符不能成为公共前缀。
特别注意,当strs=[“aa”,“a”]时,这时会需要判断第二个字符串的第二个字符,但由于字符串长度问题,还是报错,所以要加限制条件,来判断是否存在这样的字符。
按照以上思路,运行时出现了特殊测试用例:[]。空字符串集合无法进入循环,因为读不到strs[0],所以在外层嵌套if语句。
执行用时: 11 ms, 在Longest Common Prefix的Java提交中击败了60.19% 的用户
class Solution {
public String longestCommonPrefix(String[] strs) {
String pre="";//初始化公共前缀
if (strs.length>0) {
//如果字符串集合非空
bgm:for (int i = 0; i < strs[0].length(); i++) {
//外层循环命名bgm,方便一次性跳出循环
char c=strs[0].charAt(i);//依次取第一个字符串的第i个字符元素
for (int j = 1; j < strs.length; j++) {
//对字符串数组中的第2~end个字符进行判断
if (i>strs[j].length()-1||strs[j].charAt(i)!=c) {
//如果要查找的元素位置 超过第j个字符串的最后一个位置,
//或者,该位置上的字符不一致,直接跳出最外层循环,停止查找公共前缀。
break bgm;
}
}
pre=pre+c;//对所有2~end个字符进行判断后都满足,那么认证c是公共前缀中的字符
}
}
return pre;
}
}
官方解法
截止做题时间,leetcode中文网站尚未给出官方解法