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

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

示例 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;//返回最终结果
	}
}

运行结果:

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性