一、题目
编写一个函数来查找字符串数组中的最长公共前缀
如果不存在公共前缀,返回空字符串""
示例 1: 输入:strs =["flower" ,"flow" ,"flight"] 输出:"fl”
示例 2: 输入:strs =["dog","racecar","car" 输出:"" 解释:输入不存在公共前缀。
提示: 1<= strs.length <= 200、0<= strs[i].length<=200 strs[i]、仅由小写英文字母组成
二、实现思路
1.边界条件:如果输入数组为空或长度为0,直接返回空字符串。
2.初始前缀:假设第一个字符串是公共前缀。
3.逐个比较:遍历数组中的每个字符串,逐个更新公共前缀。
4.更新前缀:对于每个字符串,逐字符比较当前公共前缀,更新公共前缀为相同的部分。
5.返回结果:最终的公共前缀即为结果。
三、代码实现
package com.thor.test;
public class Demo {
public static void main(String[] args) {
/*
* 1.题目
* 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀,返回空字符串""
* 示例 1: 输入:strs =["flower" ,"flow" ,"flight"] 输出:"fl”
* 示例 2: 输入:strs =["dog","racecar","car" 输出:"" 解释:输入不存在公共前缀。
* 提示: 1<= strs.length <= 200 、0<= strs[i].length<=200、 strs[i]仅由小写英文字母组成
*
* 2.实现思路
* 边界条件:如果输入数组为空或长度为0,直接返回空字符串。
* 初始前缀:假设第一个字符串是公共前缀。
* 逐个比较:遍历数组中的每个字符串,逐个更新公共前缀。
* 更新前缀:对于每个字符串,逐字符比较当前公共前缀,更新公共前缀为相同的部分。
* 返回结果:最终的公共前缀即为结果
* */
//示例 1: 输入:strs =["flower" ,"flow" ,"flight"] 输出:"fl”
//示例 2: 输入:strs =["dog","racecar","car" 输出:"" 解释:输入不存在公共前缀。
String[] strs = {"flower", "flow", "flight"};
System.out.println(longestCommonPrefix(strs));
String[] strs1 = {"dog","racecar","car"};
System.out.println(longestCommonPrefix(strs1));
}
public static String longestCommonPrefix(String[] strs) {
// 如果输入数组为空或长度为0,直接返回空字符串
if (strs == null || strs.length == 0) {
return "";
}
// 假设第一个字符串是公共前缀
String prefix = strs[0];
// 遍历数组中的每个字符串
for (int i = 1; i < strs.length; i++) {
// 逐个更新公共前缀
while (strs[i].indexOf(prefix) != 0) {
// 如果当前字符串不以当前前缀开头,则缩短前缀
prefix = prefix.substring(0, prefix.length() - 1);
// 如果前缀为空,说明没有公共前缀,返回空字符串
if (prefix.isEmpty()) {
return "";
}
}
}
// 返回最终的公共前缀
return prefix;
}
}