LeetCode14 最长公共前缀

Posted by Think different. on November 22, 2020

Leetcode第十四题 最长公共前缀 难度:简单

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

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

示例 1:
输入: ["flower","flow","flight"]
输出: "fl"

示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀

说明: 所有输入只包含小写字母 a-z 。

1.我的解法

思路:首先传入的字符串数组有三种情况:

​ 第一种:传入的是个空数组,那么返回””

​ 第二种:传入的数组只有一个元素,那么返回它本身

​ 第三种:正常传入多个元素。以第一个元素为基准,依次遍历字符去和后面的元素对应的字符去比较。

​ 如果各个元素对应位置的字符都相同,那么就将该字符放进StringBuffer中。

​ 如果遇到不一样的或者异常的情况,就退出比较。返回结果。

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs.length==0){
            return "";
        }
        if (strs.length==1){
            return strs[0];
        }
        StringBuffer resultSb = new StringBuffer();

        a:for (int j=0;j<strs[0].toCharArray().length;j++){
            char flag = strs[0].toCharArray()[j];
            for (int i=1;i<strs.length;i++){
                try{
                    if (flag==strs[i].toCharArray()[j]){
                        if (i==strs.length-1){
                            resultSb.append(flag);
                        }
                    }else{
                        break a;
                    }
                }catch (Exception e){
                    break a;
                }
            }
        }

        return resultSb.toString();
    }
}

2.官方解法

官方题解中用到了String.charAt(int)方法。这个方法是我没有想到的。用到这个方法就可以省去将字符串转换为字符数组的过程,既节约时间,也节约了空间。

//String.charAt(int) 返回在index索引处的字符。 
public char charAt(int index)