牛客Top200---最长公共前缀(java)

Posted 小样5411

tags:

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

题目

分析

这题可以用一个技巧,首先最长公共前缀是取决于什么的?那就是最长的那个字符串,和最短的那个字符串,取这两个字符串的公共部分。
例1 [“abca”,“abc”,“abca”,“abc”,“abcc”]
最长的是"abcc",一样长的比ASCI,而最短的是"abc",那么就只要计算这两个的公共部分,也就是"abc"

例2 [“fl”,“flen”,“flow”,“fole”,“fpower”]
最长的是"fpower",最短的是"fl",那么公共就是比较两者,只有一个相同,那么就返回"f"

例3 [“a”,“b”]
两个都不一样,无公共的,就返回 “”

等等,都是这样,我们先做一个排序,然后取第一个和最后一个,也就是最长与最短,统计两个相同的部分(公共前缀)

代码

import java.util.*;

public class Solution {

    public String longestCommonPrefix (String[] strs) {
        //首先判断是否为空
        if(strs == null || strs.length == 0){
            return "";//无公共前缀
        }
        //只有一个字符串,返回本身即可
        if(strs.length == 1){
            return strs[0];
        }
        Arrays.sort(strs);
        String shortest = strs[0];//最短字符串
        String longest = strs[strs.length - 1];//最长字符串
        int i = 0;//记录公共部分索引
        String same = "";
        //最短字符串遍历完毕,则退出
        while(i < shortest.length()){
            //对应位置是否相等,求公共部分
            if(shortest.charAt(i) == longest.charAt(i)){
                same += shortest.charAt(i);//合并公共字符
                i++;
            }else{
                break;//只要不相等,就跳出
            }
        }
        return same;
    }
}

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

最长公共前缀(NC55/考察次数Top64/难度简单)

最长公共前缀(NC55/考察次数Top64/难度简单)

牛客Top200---最长无重复子数组(java详解)

牛客Top200---最长回文字符串(java)

牛客Top200---最长递增子序列(求子序列+长度 画图详解java)

牛客Top200---括号序列(java详解)