编写一个函数来查找字符串数组中的最长公共前缀 。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"]输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀 。
提示:
思路分析:如果是个空数组,直接返回空字符串 。以第一个字符串作为标准,分别与后面的每个字符串进行比较 。
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
代码实现:
import java.util.Iterator;//题目链接:https://leetcode.cn/problems/longest-common-prefix/public class T14 { public static void main(String[] args) {// 测试一把Solution solution = new Solution();String[] str = { "flower","flow","flowight"};String string = solution.longestCommonPrefix(str);System.out.println(string); }}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;/***int j = 0; => 这个写在外面是为了后面能够得到j的值,*从而得到在哪里有公共前缀,如果写在里面,一旦跳出for循环,将无法得到*公共前缀的坐标*/for (; j < ans.length() && j < strs[i].length(); j++) {/*** j < ans.length() && j < strs[i].length() => 比较的时候,总得* 在两个要比较的字符串的长度内进行比较,更准确的说,应该是在* 两个字符串中的较短的字符串长度内进行比较*/if (ans.charAt(j) != strs[i].charAt(j)) {//只要发现有一个字符不匹配,则立即跳出循环break;}}ans = ans.substring(0, j);//得到公共前缀/*** substring(int beginIndex, int endIndex)方法的作用:* 返回一个新字符串,它是此字符串的一个子字符串 。* 该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符 。* 因此,该子字符串的长度为 endIndex-beginIndex 。示例:"hamburger".substring(4, 8) returns "urge""smiles".substring(1, 5) returns "mile"*/if (ans.equals("")) {//如果发现没有公共前缀,则返回空字符串return ans;}}return ans;//返回最终结果 }}
运行结果:文章插图
【Java 最长公共前缀】
经验总结扩展阅读
- 支持 Java 8/11/17/19 的框架,Solon v1.10.5 版本发布
- Java Style的C++容器流式处理类
- C++和Java多维数组声明和初始化时的区别与常见问题
- SpringBoot-JavaMailSender接口实战
- 自己动手写ls命令——Java版
- 三十七 Java开发学习----SpringBoot多环境配置及配置文件分类
- 【Java8新特性】- Stream流
- 🔥支持 Java 19 的轻量级应用开发框架,Solon v1.10.4 发布
- Java核心技术阅读笔记 java中的自动拆装箱与缓存
- 【Java】 DirectByteBuffer堆外内存回收