题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
解题思路:纵向扫描
AC代码:
public class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
//1,用于保存结果
StringBuffer res = new StringBuffer();
int flag = 0;
//2,j定义扫描方向,进行扫描
for (int j = 0; flag == 0; j++) {
if (strs[0].length() <= j)
break;
//1,1,判断当前列中元素是否相同
char ch = strs[0].charAt(j);
for (int i = 1; i < strs.length; i++) {
String str = strs[i];
//1,2,如果扫描器扫完最短字符串或当前列中元素不相等,推出扫描
if (str.length() <= j || str.charAt(j) != ch) {
flag = 1;
break;
}
}
//1,3,否则,向结果集中添加当前列的一个字符,并继续扫描。
if (flag == 0)
res.append(ch);
}
return res.toString();
}
}
分析:
时间复杂度O(mn): m为字符串平均长度,n为字符数组长度。
空间复杂度O(n): 维护一个StringBuffer所需的空间