LeetCode 14. Longest Common Prefix(最长公共前缀)

Write a function to find the longest common prefix string amongst an array of strings.

即给定一个字符串数组,找出数组中所有字符串的最长公共前缀
解决该问题的算法有多种,最容易想到的是横向扫描,思路如下图:

该算法的时间复杂度为O(S),S是所有字符串的总字符数;空间复杂度为O(1)
代码如下:

public class Solution {
    public String longestCommonPrefix(String[] strs) {
        
        if(strs.length == 0)
            return "";
        String prefix = strs[0];                  // 以第一个字符串作为初始前缀
        for(int i = 1; i < strs.length; i++)      // 向后横向扫描
        {
            while(strs[i].indexOf(prefix) != 0)   // 不以prefix为前缀
            {
                prefix = prefix.substring(0, prefix.length() - 1);  // 缩小prefix
                if (prefix.isEmpty()) 
                    return "";
            }        
        }
        return prefix;
    }
}

如果字符串数组中有一个字符串很短,使用上面横向扫描的方法需要很长时间才能将初始公共前缀缩短到最终的结果,这时使用纵向扫描可以加快求解速度。该算法的平均时间复杂度也是O(S),空间复杂度为O(1)
代码如下:

public class Solution {
    public String longestCommonPrefix(String[] strs) {
            
        if (strs.length == 0) 
        return "";
        for (int i = 0; i < strs[0].length(); i++)
        {
            char c = strs[0].charAt(i);     // 取出当前字符向后纵向扫描
            for (int j = 1; j < strs.length; j++) 
            {
                if (strs[j].length() <= i || strs[j].charAt(i) != c) // 当前字符已不属于公共前缀
                    return strs[0].substring(0, i);             
            }
        }
        return strs[0];
    }
}

本题还有很多其他解法,如果你感兴趣,点击这里查看

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,107评论 19 139
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,275评论 0 4
  • 9.3.3 快速排序   快速排序将原数组划分为两个子数组,第一个子数组中元素小于等于某个边界值,第二个子数组中的...
    RichardJieChen阅读 1,877评论 0 3
  • 8:30草坪已经开始洒水,细细的水柱,让周围的空气也变得清新。 小区里,很多老人。有单独住的,也有和老伴一起的。今...
    安星阅读 231评论 0 0
  • 2017年11月25日 星期六 长沙 阴天 (农历二零一七年十月初八) 我是日记星球96号星宝宝香油女王玲子...
    香油女王玲子阅读 611评论 1 2