首页 > 其他分享 >力扣14 寻找字符串数组中最长公共前缀

力扣14 寻找字符串数组中最长公共前缀

时间:2022-12-08 02:22:06浏览次数:43  
标签:String 前缀 数组 力扣 str 公共 字符串 14

力扣14 寻找字符串数组中最长公共前缀

题目:

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

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

示例 1:

输入:strs = ["flower","flow","flight"]
输出:"fl"

示例 2:

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

提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成

解题思路:

首先我们需要将这个字符串数组进行排序,然后找到这个字符串数组中最短的字符串,因为进行循环比较的时候比较的次数不会超过最短的字符串的长度。进行排序后之后的数组我们仅仅比较第一个字符串与最后一个字符串即可。

代码:

import java.util.Arrays;

/**
 * 返回一个字符串数组中的最长的公共前缀。
 * 首先我们可以对这个数组进行排序,然后比较排序之后的第一个字符串与最后一个字符串
 * 的元素是否相同,可以明确的是最多比较的次数是最短字符串的长度
 */
public class MaxLengthSubStrings {
    public static void main(String[] args) {
        String[] strings = {"abc","abcd","abdsc","abcwsed"};
        String s = maxLengthSubString(strings);
        System.out.println("s = " + s);
    }
    //定义一个方法获得最长的公共前缀,返回值类型为String参数为String[] str
    public static String maxLengthSubString(String[] str){
        if (str == null || str.length == 0) {
            return null;
        }
        if (str.length == 1) {
            return str[0];
        }
        int len = str.length;
        //对数组进行排序
        Arrays.sort(str);
        String firstStr = str[0];
        String lastStr = str[len - 1];
        //定义一个StringBuilder用来接收最长的公共前缀
        StringBuilder stringBuilder = new StringBuilder();
        //取得字符串数组中的最短字符串的长度
        int minLength = Math.min(firstStr.length(),lastStr.length());
        //判断第一个字符串与最后一个字符串相同的字符
        for (int i = 0; i < minLength; i++) {
            if(firstStr.charAt(i) == lastStr.charAt(i)){
                //如果字符相等就添加进stringBuilder
                stringBuilder.append(firstStr.charAt(i));
            }else {
                //否则就退出比较
                break;
            }
        }
        return stringBuilder.toString();
    }
}

标签:String,前缀,数组,力扣,str,公共,字符串,14
From: https://www.cnblogs.com/ygstudy/p/16965050.html

相关文章

  • slam14(1) v4_1 卡尔曼滤波3 使用例子和代码 ardunio mpu6050
     代码https://github.com/TKJElectronics/KalmanFilter   原理剖析原理2卡尔曼融合滤波https://zhuanlan.zhihu.com/p/36374943 关键点1他的偏置和噪声......
  • 力扣 501. 二叉搜索树中的众数
    501.二叉搜索树中的众数给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回BST中的所有 众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按 ......
  • 力扣 230. 二叉搜索树中第K小的元素
    230.二叉搜索树中第K小的元素给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从1开始计数)。示例1:输入:root=......
  • 力扣 leetcode 78. 子集
    问题描述给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。提示:1<=nums.le......
  • 力扣-77-组合
    直达链接这个问题应该就是我想找的答案了,把k=1~n全部输出一遍然后如果k=n,那就是全排列问题不对,还是不一样,这里只考虑数字组合,而没考虑数字顺序也就是排列问题两种解法,第......
  • 力扣 leetcode 1775. 通过最少操作次数使数组的和相等
    问题描述给你两个长度可能不等的整数数组nums1和nums2。两个数组中的所有值都在1到6之间(包含1和6)。每次操作中,你可以选择任意数组中的任意一个整数,将它变成......
  • 140-viewerjs图片预览功能
    <linkrel="stylesheet"href="${ctxJs}/viewerjs/viewer.css"> <scriptsrc="${ctxJs}/viewerjs/viewer.js"></script>定义一个div,图片区:<divid="picShow"><img......
  • 力扣540(java&python)-有序数组中的单一元素(中等)
    题目:给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足O(logn)时间复......
  • 力扣12 数字转为罗马数字
    力扣12数字转为罗马数字题目:罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符数值I1V5X10L50C......
  • 力扣 leetcode 797. 所有可能的路径
    问题描述给你一个有n个节点的有向无环图(DAG),请你找出所有从节点0到节点n-1的路径并输出(不要求按特定顺序)graph[i]是一个从节点i可以访问的所有节点的列表(即从节......