刷完LeetCode题库——14. 最长公共前缀

76 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情

题目详情

LeetCode题库序号 14. 最长公共前缀 ,难度为 简单

Tag : 「字符串」

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

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

示例 1:

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

示例 2:

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

提示:

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

字符串

题解思路:

这道题目虽然是一道简单题,但是其中还是存在一定的逻辑分析的,很容易陷入复杂的思维方式之中,导致题目无法解答,首先,假如我们的字符串数组的长度是1,那么最大的公共前缀是什么呢,肯定就是那个字符串本身的。那么现在再加入一个字符串,最长公共前缀的长度是多少呢?肯定就是拿当前的字符串或者称为当前的最长公共前缀跟现有的这个字符串比较。得出一个新的最长公共前缀,以此类推,如果再加入其他字符串。就会拿当前的最长公共前缀和加入的字符串进行比较。最后就可以得出真正的最长公共前缀了。

题解代码

public class Solution {

    public String longestCommonPrefix(String[] strs) {
        if (strs == null && strs.length == 0) {
            return "";
        }
        
        String prefix = strs[0];
        int count = strs.length;
        for (int i = 1; i < count; i++) {
            prefix = longestCommonPrefix(prefix, strs[i]);
        }

        return prefix;
    }

    public String longestCommonPrefix(String str1, String str2) {
        int min = Math.min(str1.length(), str2.length());
        int index = 0;
        while (index < min && str1.charAt(index) == (str2.charAt(index))) {
            index++;
        }

        return str1.substring(0, index);
    }
}

结尾

我的"刷完LeetCode题库"系列文章的第 No.14 序号的题目,本次刷题之旅系列开始于 2022-06-12,因为LeetCode上部分是有锁题,我自己的目标是将先把所有不带锁的题目刷完。自己能够通过这次刷题之旅勉励自己,并且提升逻辑思维能力。这个系列的文章就是会见证我自己的一个成长过程!

思路虽然不是最优的,但是我会尽我所能!

为了让我自己的刷题之旅不中断,我特地建立了相关的仓库,来记录我自己的刷题之旅。 github.com/jackpan123/…