[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读

简介: [Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读

题目

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

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


示例

示例1

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

输出:"fl"


示例2

输入:strs = ["dog","racecar","car"]

输出:""

解释:输入不存在公共前缀。


提示 :

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


👉️ 力扣原文

 

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;
       }     
}


详细解读

这段代码实现了一个寻找字符串数组中最长公共前缀的算法。下面是这个算法的解读:


  1. **初始化最长公共前缀:**首先,将最长公共前缀初始化为第一个字符串strs[0]。
  2. **遍历字符串数组:**从第二个字符串开始遍历数组。
  3. **比较字符:**对于当前的字符串strs[i],从第一个字符开始,与最长公共前缀ans逐个字符比较。
  4. **截取最长公共前缀:**如果在某一位置发现字符不匹配,则将最长公共前缀ans截取到不匹配位置,保留前面匹配的部分。
  5. **更新最长公共前缀:**将截取后的最长公共前缀ans更新为当前的最长公共前缀。
  6. **重复步骤3-5:**继续遍历字符串数组中的下一个字符串,重复比较和更新步骤,直到遍历完所有字符串或者发现最长公共前缀为空字符串。
  7. **返回结果:**返回最终得到的最长公共前缀ans。


该算法的时间复杂度为O(n*m),其中n是字符串数组的长度,m是最长公共前缀的长度。

相关文章
|
17天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
4天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
9天前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
18 3
|
9天前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
14 3
|
9天前
|
算法
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
30 1
|
10天前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
19天前
|
算法 安全 Java
java代码 实现AES_CMAC 算法测试
该代码实现了一个AES-CMAC算法的简单测试,使用Bouncy Castle作为安全提供者。静态变量K定义了固定密钥。`Aes_Cmac`函数接受密钥和消息,返回AES-CMAC生成的MAC值。在`main`方法中,程序对给定的消息进行AES-CMAC加密,然后模拟接收ECU的加密结果并进行比较。如果两者匹配,输出&quot;验证成功&quot;,否则输出&quot;验证失败&quot;。辅助方法包括将字节转为16进制字符串和将16进制字符串转为字节。
|
26天前
|
搜索推荐 Java
Java排序算法
Java排序算法
18 0
|
26天前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
24 4
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。