码迷,mamicode.com
首页 > 其他好文 > 详细

最长公共前缀

时间:2020-01-12 23:37:50      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:css   common   res   官方   去掉   leetcode   stc   span   bsp   

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"
示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:

所有输入只包含小写字母 a-z 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

首先考虑边界情况,如果字符串数组为空,则返回“ ”。

对于非空字符串数组,拿出第一个字符串fs作为基准串,纵向对比数组字符串的每一个位置,直到出现不同的字符或者长度不一致时,返回已经匹配的子串。

 1 class Solution {
 2     public String longestCommonPrefix(String[] strs) {
 3         if (strs.length == 0)
 4         {return "";}
 5         String fs=strs[0];
 6         for (int i=0;i<fs.length();i++)
 7         {
 8             char temp = fs.charAt(i);
 9             for (int j=1;j<strs.length;j++)
10             {
11                 if (i>(strs[j].length()-1) || temp!= strs[j].charAt(i) )
12                 {
13                     return new String(fs.substring(0,i));
14                 }
15             }
16         }
17         return fs;
18     }
19 }
执行结果:
通过
执行用时 :1 ms, 在所有 Java 提交中击败了84.91%的用户
内存消耗 :36.1 MB, 在所有 Java 提交中击败了87.38%的用户
 
在评论里看到另一种解法
 1 public String longestCommonPrefix(String[] strs) {
 2     if (strs == null || strs.length == 0  ) return "";
 3     String reg = strs[0];
 4     for (String str : strs){
 5         while (!str.startsWith(reg)) {
 6             if (reg.length() == 1) {
 7                 return "";
 8             }
 9             reg = reg.substring(0, reg.length()-1);
10         }
11     }
12     return reg;
13 }

用了startsWith()来判断reg是否为公共前缀,如果不一致返回0进入循环,考虑了数组只有一个字符串的情况。reg去掉尾字符,继续循环。

这种做法从基准串尾开始比对,只遍历整个数组一次,循环中每次进行一次前缀比较,而我的做法要遍历整个数组(最长公共前缀长)次,每次进行(数组长度-1)次字母比较,明显的这种做法更快一些。

最长公共前缀

标签:css   common   res   官方   去掉   leetcode   stc   span   bsp   

原文地址:https://www.cnblogs.com/zccfrancis/p/12185242.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!