LeetCode刷题记录(二十四):最长公共前缀

134 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第24天,点击查看活动详情

最长公共前缀

题目如下图所示,也可以在LeetCode题目中找到此题。

image.png

题目解析

题目素材解析

根据题目描述,该题目提供了一个如下数组。

  1. 一维数组,其中包含着多个字符串元素。

注意:数组的长度在1到200之间;并且数组中的元素可能为空,长度不超过200。

我的解读

本道题其实还是挺简单的,考察的点就在于是否能正确的对比字符串中每一个字符。

要正确解答这道题,只需要解决这两个问题。

一,如何获取字符串中指定位置的字符。

二,如何处理中间值的对比和保留。

解题思路

解题思路也是一样的,虽然我的方法不是最好的。

第一步,先声明一个StringBuilder对象,用来存储结果值。

第二步,把数组中的第一个值取出来分隔成字符串数组,因为数组的长度最短也只会为1,所以不用担心报错。

第三步,将转换后的字符串数组进行循环遍历。

第四步,获取每一个字符,并且去原始数组中的元素进行对比,这里使用substring方法获取每一个位置的字符。

第五步,考虑到数组中的元素可能会存在长短不一的情况,所以我们要比对一下结果值和元素的长度才行,这也是这道题要处理的一个特殊情况。

最后可以得到我们要的预期结果。

代码

class Solution {
    public String longestCommonPrefix(String[] strs) {
        StringBuilder result = new StringBuilder();
        String[] first = strs[0].split("");
        for (int i = 0; i < first.length; i++){
            String z = result.toString() + first[i];
            for(String s : strs){
                if(s.length() <= result.length() || !z.equals(s.substring(0, i+1))){
                    return result.toString();
                }
            }
            result.append(first[i]);
        }
        return result.toString();
    }
}

执行结果

image.png