疏窗

  • 首页
  • 生活
  • Java
  • Python
  • Golang
  • 其他
  • 归档

  • 搜索
leetcode jdk 生活 nas nosql 数据库 线程 爬虫 中间件

leetcode第十四题 最长公共前缀

发表于 2022-06-24 | 分类于 Java | 0 | 阅读次数 1568

题目:

/**
 *编写一个函数来查找字符串数组中的最长公共前缀。
 *如果不存在公共前缀,返回空字符串 ""。
 */

难度:

简单

思路分析:

排序得到最短字符串后使用最短字符串和集合的值来比较

代码:

执行用时:2 ms, 在所有 Java 提交中击败了19.79%的用户

内存消耗:39.7 MB, 在所有 Java 提交中击败了15.45%的用户

	public  String longestCommonPrefix(String[] strs) {
        //先将字符串转set(去重、排序)
        TreeSet<String> set = new TreeSet<>(new Comparator<String>(){
            @Override
            public int compare(String o1, String o2) {
                if(o1.length() < o2.length()){
                    return -1;
                }else if(o1.length() > o2.length()){
                    return 1;
                }else{
                    if(o1.equals(o2)){
                        return 0;
                    }else{
                        return 1;
                    }
                }
            }
        });
        set.addAll(Arrays.asList(strs));
        //只有一个元素时直接返回结果
        if(set.size() == 1){
            return set.first();
        }
        String k = set.first();
        String result = "";
        for(int i = 0;i < k.length();i++){
            //比较结果时只从最短字符串开始比较,如果比较的结果不等于false则最短字符串去掉最后一位继续比较
            String z = k.substring(0,k.length()-i);
            if(hasStartWith(z,set)){
                result = z;
                break;
            }
        }
        return result;
    }

    public boolean hasStartWith(String str, Set<String> set){
        for(String x : set){
            if(!x.startsWith(str)){
                return false;
            }
        }
        return true;
    }
打赏作者
疯子虾夫 微信支付

微信支付

疯子虾夫 支付宝

支付宝

  • 本文作者: 疯子虾夫
  • 本文链接: https://hefengwei.com/archives/leetcode第十四题最长公共前缀md
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# leetcode
leetcode第一题 两数之和
Windows安装wsl2
  • 文章目录
  • 站点概览
疯子虾夫

疯子虾夫

24 日志
5 分类
9 标签
RSS
Creative Commons
© 2025 疯子虾夫
由 Halo 强力驱动
|
主题 - NexT.Mist v5.1.4
赣ICP备2024026242号

粤公网安备 44010602005909号