算法题---最长公共前缀

题目来源:https://leetcode-cn.com/problems/longest-common-prefix/

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

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

示例 1:

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

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

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

解答:

复制代码
package com.zx.leetcode.longestcommonprefix;

/**
 * @Author JAY
 * @Date 2019/6/29 13:30
 * @Description 最长公共前缀
 **/
public class SolutionV2 {

    public static void main(String[] args) {
//        String[] str = {"dog","dracecar","dcar"};
//        String[] str = {"flower","flow","flight"};
        String[] str = {"flow","flow2","flow3","flight"};
//        String[] str = {"1flow","2flow","flow"};
        System.out.println(longestCommonPrefix(str));
    }

    public static String longestCommonPrefix(String[] strs) {
        if (strs.length == 0){
            return "";
        }
        String s = strs[0];
        for (int i = 1; i < strs.length; i++) {
            while (strs[i].indexOf(s) != 0){
                s = s.substring(0,s.length() - 1);
                if (s.isEmpty()){
                    return "";
                }
            }
        }
        return s;
    }

}
复制代码

解答二:

复制代码
package com.zx.leetcode.longestcommonprefix;

/**
 * @Author JAY
 * @Date 2019/6/29 13:30
 * @Description 最长公共前缀
 **/
public class Solution {

    public static void main(String[] args) {
//        String[] str = {"dog","dracecar","dcar"};
//        String[] str = {"flower","flow","flight"};
//        String[] str = {"flow","flow","flow"};
        String[] str = {"1flow","2flow","flow"};
        System.out.println(longestCommonPrefix(str));
    }

    public static String longestCommonPrefix(String[] strs) {

        if(strs == null || strs.length == 0){
            return "";
        }

        boolean begin = true;
        StringBuilder sb = new StringBuilder();
        int i = 0;
        int length = strs.length;
        String first = strs[0];

        while (begin){
            try {
                String substring = first.substring(i, i + 1);
                for (int index = 1; index < length; index++){
                    if (!substring.equals(strs[index].substring(i,i+1))){
                        begin = false;
                        break;
                    }
                }
                if (begin){
                    sb = sb.append(substring);
                }
                if (first.equals(sb.toString())){
                    //说明已经全部匹配到了,推出循环
                    begin = false;
                }
                i++;
            }catch (Exception e){
                begin = false;
            }
        }
        return sb.length() == 0 ? "" : sb.toString();
    }

}
复制代码

 

posted @   金鱼的第七秒记忆  阅读(373)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示