leetcode算法14.最长公共前缀

113 阅读2分钟

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

一、题目描述:

14. 最长公共前缀 - 力扣(LeetCode) (leetcode-cn.com)

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

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

 

示例 1:

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

示例 2:

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

提示:

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

二、思路分析:

首先,我们应该是采用平行的方式,就是每次比较每个字符串的第n个字符
所以我们的最外层循环应该是字符串的长度,而每个字符串都是不定长的,求公共
所以我们需要找到最短的字符串长度作为循环的次数,不会有比这更多的了;
然后是内循环,内循环就应该有一个字符串数组的遍历,这里就需要用到charAt(i)
它是取某个字符串的第i个字符,就是我们本题中所需要的;然后进行对比
我们此处每次都取第一个字符串的字符作为对比,一旦都相等,则就将这个字符存入,否则就返回已经对比好的值;

三、AC 代码:

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length == 0) return "";
        String str = "";     //这个是用来接收这个字符串的;
        int minLen = Integer.MAX_VALUE;
        for(int i = 0; i < strs.length; i++) {
            minLen = minLen < strs[i].length()?minLen:strs[i].length();
        }
        for(int i = 0; i < minLen; i++) {
            char compareChar = strs[0].charAt(i);
            for(String s : strs) {
                if(s.charAt(i) != compareChar) {
                    return str;
                }
            }
            str += strs[0].charAt(i);
        }
        return str;
    }
}

四、总结:

执行用时: 0 ms , 在所有 Java 提交中击败了 100.00% 的用户 内存消耗: 36.2 MB , 在所有 Java 提交中击败了 97.59% 的用户 - 最长公共前缀 - 力扣(LeetCode)

C语言,用第一个单词做参照,后面一个一个扫 - 最长公共前缀 - 力扣(LeetCode)