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

Posted ningjj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法题---最长公共前缀相关的知识,希望对你有一定的参考价值。

题目来源: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();
    

 

以上是关于算法题---最长公共前缀的主要内容,如果未能解决你的问题,请参考以下文章

算法日练-最长公共前缀

算法日练-最长公共前缀

算法日练-最长公共前缀

算法leetcode|14. 最长公共前缀(rust重拳出击)

算法leetcode|14. 最长公共前缀(rust重拳出击)

算法 Notes|LeetCode 14. 最长公共前缀 - easy