14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
思路:暴力双层循环
先找到长度最短的个字符串,
遍历这个字符串,判断这个字符串的每个字符是否等于其他字符串相应字符串该位置的字符
如果该字符在其他字符串相应位置都出现过,则附加的结果串中;否则直接返回结果串
1 class Solution {
2 public String longestCommonPrefix(String[] strs) {
3 // 暴力双层循环
4 if(strs.length == 0){
5 return "";
6 }
7
8 // 先找到长度最短的个字符串
9 String shortestStr = "";
10 int minLength = 1 << 30;
11 int len = strs.length;
12 for(int i = 0; i < len; i++){
13 if(strs[i].length() < minLength){
14 shortestStr = strs[i];
15 minLength = strs[i].length();
16 }
17 }
18 StringBuilder res = new StringBuilder();
19 // 遍历这个字符串,判断这个字符串的每个字符是否等于其他字符串相应字符串该位置的字符
20 for(int i = 0; i < shortestStr.length(); i++){
21 char ch = shortestStr.charAt(i);
22 for(int j = 0; j < len; j++){
23 if(ch != strs[j].charAt(i)){
24 return res.toString();
25 }
26 }
27 // 如果该字符在其他字符串相应位置都出现过,则附加的结果串中
28 res.append(ch);
29 }
30
31 // 否则直接返回结果串
32 return res.toString();
33 }
34 }
leetcode 执行用时:1 ms, 在所有 Java 提交中击败了87.72%的用户, 内存消耗:36.3 MB, 在所有 Java 提交中击败了94.08%的用户
复杂度分析:
时间复杂度:O(nL)。n是数组大小,L是最短字符串的长度。时间花费主要在双层循环中,外层循环迭代L次,外层循环每迭代一次,内层循环迭代n次,所以时间复杂度为O(nL)。
空间复杂度:O(L)。需要一个结果字符串存储公共前缀。