题目取自LeetCode
题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
解决代码:
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length==0) return "";//字符串数组为空,返回空串
if(strs.length==1) return strs[0];//数组中如果只有一个字符串,返回该字符串
char[][] char2D=new char[strs.length][];//新建二维字符数组
int minLength=strs[0].length();
//遍历,把每个字符串转换成字符数组,装填在二维数组中,并找到最短字符串。
for(int i=0;i<strs.length;i++){
if(strs[i].length()<minLength) minLength=strs[i].length();
char2D[i]=strs[i].toCharArray();
}
int count=0;//公共前缀长度的计数器
char[] newCharArray=new char[minLength];
//下面两层循环请见图解
loop:for(int i=0;i<minLength;i++){
for(int j=0;j<strs.length-1;j++){
if(char2D[j][i]!=char2D[j+1][i]) break loop;//如果此行验证不能通过,直接跳出最外层循环(起别名:loop)
if(j==strs.length-2) newCharArray[count++]=char2D[j][i];//如果上一行的验证通过了,那么验证它是不是本层全部都相同。
}
}
return String.valueOf(newCharArray,0,count);//构造成字符串返回。
}
}
内层循环是横向比较如果有
执行用时 : 3 ms, 在Longest Common Prefix的Java提交中击败了81.99% 的用户
内存消耗 : 34.9 MB, 在Longest Common Prefix的Java提交中击败了94.09% 的用户