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

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

}

原文地址:https://www.cnblogs.com/ningJJ/p/11106509.html

时间: 2024-07-29 18:54:18

算法题---最长公共前缀的相关文章

【leetcode 简单】第五题 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀. 说明: 所有输入只包含小写字母 a-

LeetCode第14题 最长公共前缀

/* 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". ["flower","flow","flight"] */ 思路1:时间复杂度为O(n*m),遍历数组 ,相同元素放入Stringbuilder中. 1 class Solution14 { 2 3 public String longestCommonPrefix(String[] strs) { 4 if (strs.lengt

LeetCode刷题-最长公共前缀(简单)

题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow","flight"]输出: "fl" 示例 2: 输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀. 说明: 所有输入只包含小写字母 

PHP算法之最长公共前缀

### 解题思路 方法太笨重后期优化 循环比较 循环长度利用max(最长字符串的循环) 不满住条件的截取 ### 代码 ```php class Solution { /** * @param String[] $strs * @return String */ function longestCommonPrefix($strs) { $count = count($strs); $val = []; $len = 0; for($i=0;$i<$count;$i++){ $arr = str

【LeetCode-面试算法经典-Java实现】【014-Longest Common Prefix(最长公共前缀)】

[014-Longest Common Prefix(最长公共前缀)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Write a function to find the longest common prefix string amongst an array of strings. 题目大意 写一个函数找出一个字串所数组中的最长的公共前缀. 解题思路 第一步先找出长度最小的字符串,然后将这个字符串与其它的字符串相比找出最短的最公共前缀. 代码实现 publi

经典算法题每日演练——第四题 最长公共子序列

原文:经典算法题每日演练--第四题 最长公共子序列 一: 作用 最长公共子序列的问题常用于解决字符串的相似度,是一个非常实用的算法,作为码农,此算法是我们的必备基本功. 二:概念 举个例子,cnblogs这个字符串中子序列有多少个呢?很显然有27个,比如其中的cb,cgs等等都是其子序列,我们可以看出 子序列不见得一定是连续的,连续的那是子串. 我想大家已经了解了子序列的概念,那现在可以延伸到两个字符串了,那么大家能够看出:cnblogs和belong的公共子序列吗? 在你找出的公共子序列中,你

【简单算法】20.最长公共前缀

题目: 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀. 说明: 所有输入只包含小写字

【leetcode算法-简单】14. 最长公共前缀

[题目描述] 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow","flight"]输出: "fl" 示例 2: 输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀.说明: 所有输入只包含小写字母

hdu 4691 最长公共前缀 后缀数组 +lcp+rmq

http://acm.hdu.edu.cn/showproblem.php?pid=4691 去年暑假多校赛的题,当时还不会后缀数组 现在会了,其实自己组合后缀数组跟rmq还是对的,但是题意理解有问题,于是折腾了很久,,,, 此处简单解释下题目样例吧,希望对读者有帮助  以最后一组数据为例 myxophytamyxopodnabnabbednabbingnabit 6 0 9 9 16 16 19 19 25 25 32 32 37 前两行不解释,题目叙述很清楚 从第三行,0 9 指的是第一个字