LeetCode14. 最长公共前缀 详解
作者:互联网
LeetCode14. 最长公共前缀
题目描述
/**
*
* 编写一个函数来查找字符串数组中的最长公共前缀。
* <p>
* 如果不存在公共前缀,返回空字符串 ""。
*
*/
思路分析
- 此题目要求返回字符串数组中所有字符串的公共前缀子串
- 可以考虑使用化繁为简的思路,先编写一个方法可以得到两个字符串的最长公共前缀
- 然后遍历这个字符串数组,依次取出一个字符串,与前一次比较返回的最长公共子串再作比较
- 比较的过程中若发现最长公共子串已经为空,则直接返回空
- 否则返回遍历完比较结束的子串
- 详细思路见源码
源码及分析
//思路分析:
//1. 要查找字符串数组中最长公共前缀,采用化繁为简的思路
//2. 遍历这个字符串数据,每次比较两个字符串的公共前缀并记录
//3. 则在一次遍历结束后,每个字符串都被比较过
public String longestCommonPrefix(String[] strs) {
//数据校验
if (strs == null || strs.length == 0) {
return "";
}
//拿出字符串数组中的第一个字符串作为参考
String str = strs[0];
//遍历剩下的字符串并依次比较
for (int i = 1; i < strs.length; i++) {
//将两个字符串比较的结果继续存储到str字符串中
str = twoLongestCommonPrefix(str, strs[i]);
//如果在比较的过程中发现str已经是空的,则直接返回空串
if (str == ""){
return "";
}
}
//返回最长公共子串
return str;
}
//编写方法查找两个字符串的最长公共子串
public String twoLongestCommonPrefix(String str1, String str2) {
//数据校验
if (str1 == null || str2 == null) {
return "";
}
//定义变量保存两个字符串的最小长度
int len = Math.min(str1.length(), str2.length());
//定义一个index索引用来保存两个字符串的最长公共子串的长度
int index = 0;
for (int i = 0; i < len; i++) {
if (str1.charAt(i) == str2.charAt(i)) {
index++;
} else {
break;
}
}
//返回最长公共子串
return str1.substring(0, index);
}
标签:子串,前缀,详解,LeetCode14,str,公共,字符串,最长 来源: https://www.cnblogs.com/mx-info/p/14747156.html