【LeetCode_字符串_逻辑分析_简单】14. 最长公共前缀

目录

  • 考察点
  • 第一次:2022年12月9日14:01:10
    • 我的解题思路
      • 解题思路
      • 代码展示
    • 优化

题目描述
14. 最长公共前缀

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

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

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

考察点

第一次:2022年12月9日14:01:10

我的解题思路

解题思路

把第一个当做最长公共前缀。

从第二个开始遍历字符串数组:

当前的字符串在 与 最长公共前缀 相比较:

  • 存在相同的公共前缀,那么就变为公共前缀;
  • 如果不存在,则退出遍历,公共前缀就是空字符串;

代码展示

class Solution {
    public String longestCommonPrefix(String[] strs) {
        // 如果数组只有一个,那么直接返回
        if (strs.length < 2){
            return strs[0];
        }
        // 把第一个默认为是最大的前缀
        String maxPre = strs[0];

        // 从第二个字符开始,跟最大字符进行比较
        for (int i = 1; i < strs.length; i++) {
            // 每两两比较的最大字符串
            StringBuilder curMax = new StringBuilder("");

            // 当前待比较的字符串
            String curStr = strs[i];
            // 待比较的字符串 与 最大的前缀 比较,谁小就用谁去遍历(为了防止下标越界)
            // 当前待比较的字符串 比较小
            if (maxPre.length() >= curStr.length()){
                // 循环当前待比较的字符串
                for (int j = 0; j < curStr.length(); j++) {
                    // 在同一位置上,两者的字符都相等,两两比较的最大字符串就追加上该字符;如果不相等,直接退出对当前字符串的比较
                    if (curStr.charAt(j) == maxPre.charAt(j)){
                        curMax.append(curStr.charAt(j));
                    }else {
                        break;
                    }
                }
            }
            // 最大的前缀 比较小
            else {
                // 在同一位置上,两者的字符都相等,两两比较的最大字符串就追加上该字符;如果不相等,直接退出对当前字符串的比较
                for (int j = 0; j < maxPre.length(); j++) {
                    if (curStr.charAt(j) == maxPre.charAt(j)){
                        curMax.append(maxPre.charAt(j));
                    }else {
                        break;
                    }
                }
            }
            // 只有两两比较的最大字符串是空的,就可以直接退出循环
            if (curMax.toString() == ""){
                maxPre = "";
                break;
            }else {
                // 最大的前缀即为当前的最大值
                maxPre = curMax.toString();
            }
        }
        return maxPre;
    }
}

优化

最长的公共前缀肯定是不断变短的。

然后,而且 画解算法:14. 最长公共前缀 代码和思路比我的更加好。

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs.length == 0)
            return "";
        String ans = strs[0];
        for (int i = 1; i < strs.length; i++) {
            int j = 0;
            for (; j < ans.length() && j < strs[i].length(); j++) {
                if (ans.charAt(j) != strs[i].charAt(j))
                    break;
            }
            ans = ans.substring(0, j);
            if (ans.equals(""))
                return ans;
        }
        return ans;
    }
}

以后慢慢提升吧。

你可能感兴趣的:(#,LeetCode,leetcode,算法)