字符串,最长公共前缀
1. 题目描述
难易度:简单
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix/
2. 思路分析
- 利用for循环每次取出元素
- 利用while循环记录匹配到的最长字符
- 截取所匹配到的字符
- 循环以上步骤
- 具体过程看代码注释
3. 代码演示
/**
* @Description TODO
* @Author YunShuaiWei
* @Date 2020/6/22 15:05
* @Version
**/
public class Solution {
public static void main(String[] args) {
Solution s = new Solution();
String[] strs = new String[]{"", ""};
String res = s.longestCommonPrefix(strs);
System.out.println(res);
}
public String longestCommonPrefix(String[] strs) {
if (strs.length == 0) {
return "";
}
if (strs.length == 1) {
return strs[0];
}
String result = strs[0];
//左指针永远指向0
int l = 0;
for (int i = 1; i < strs.length; i++) {
String str = strs[i];
//右指针用于记录最长匹配到的字符个数
int r = 0;
//排除取到的为空字符的情况,建议不要放在while循环中,这样会影响效率
if (result.length() != 0 && str.length() != 0) {
while (result.charAt(r) == str.charAt(r)) {
r++;
if (r == result.length() || r == str.length()) {
break;
}
}
}
//当r为0说明没有匹配到字符,则可以直接返回
if (r == 0) {
return "";
}
//每次截取所匹配到的字符
result = result.substring(l, r);
}
return result;
}
}