首页 > 编程语言 >最长公共前缀(Java)

最长公共前缀(Java)

时间:2022-10-11 23:22:23浏览次数:50  
标签:Java 前缀 strs length ans 字符串 最长 String

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

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

示例 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,前缀,strs,length,ans,字符串,最长,String
From: https://www.cnblogs.com/malinyan/p/LeetCode14.html

相关文章

  • 2022 最新 Java 基础 面试题(二)
    2022最新Java基础面试题(二)​​下面列出这份Java面试问题列表包含的主题​​​​1、Java中能创建volatile数组吗?​​​​2、volatile能使得一个非原子操作变成原......
  • 使用 Stream API 高逼格 优化 Java 代码
    Java8的新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读放大招,流如何简化代码如果有一个需求,需......
  • java中的数组
    java中的数组数组一经定义就不能改变长度packagearray;​publicclassArrayDemo02{  publicstaticvoidmain(String[]args){    //声明定义数组的方......
  • Java中的函数式编程
    写在前面虽然JDK8已经是非常古老的版本了(截止到文章发布,目前最新JDK版本为JDK19.。。。),但JDK8中的函数式编程一直没有系统的学过。这次由于工作中的使用加上国庆假期,索性......
  • JAVA中的父类与子类
    在Java中,如果父类含有一个静态方法,且在子类中也含有一个返回类型,方法名、参数列表等都与之相同的的静态方法,在子类中只是对父类的该同名方法进行隐藏,并不是重写。父类与子......
  • apache+tomcat9.0+mod_jk+java1.8-私密版
    ​​https://www.aliyun.com/jiaocheng/186362.html​​​​在这个网页下找对应的mod_jk下载包配合上边网址进行配置https://archive.apache.org/dist/tomcat/tomcat-conn......
  • Java后端面试知识点汇总
    公众号:知识浅谈JavaEEJava中如何输出一个某种编码的字符串?Java关键字相关Java面向对象相关知识Java-集合Java-线程Java-锁Java-jdkJAVA-反射Java-jvmJava-GCJava-IONIOJava......
  • JAVA的优势和特性&JAVA的三大版本&JDK/JRE/JVM
    JAVA的优势和特性简单性面向对象(万物皆对象)可移植性(writeonce,runanywhere)高性能分布式(URL、远程调用)动态性(反射)多线程安全性(防病毒、方窃取,异常机制)健壮性......
  • Java程序运行机制
    编译型compile:将源代码转换为计算机可执行的代码,负责编译的程序成为编译器。是用于编写操作系统,比如C/C++解释型:计算机读取要执行的一段代码,要执行什么就读取什么。用于......
  • JAVA帝国的诞生
    C&C++1972年C语言诞生贴近硬件,运行极快,效率极高操作系统,编译器,数据库,网络系统等指针和内存管理1982年C++诞生面向对象兼容C语言图形领域、游戏等新语言需......