查找字符串数组中的最大公共前缀,如果不存在公共前缀,返回空字符串,Java代码
时间: 2023-11-19 15:26:26 浏览: 30
可以使用水平扫描法,先将第一个字符串作为前缀,然后逐个比较后面的字符串,如果后面的字符串不以该前缀开头,则将前缀缩短一个字符,直到找到最大公共前缀或者前缀为空字符串。
Java代码如下:
```
public String longestCommonPrefix(String[] strs) {
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;
}
```
例如,对于输入 ["flower", "flow", "flight"],输出为 "fl"。
相关问题
java 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""
以下是一个Java函数,用于查找字符串数组中的最长公共前缀。
```java
public static String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
if (strs.length == 1) {
return strs[0];
}
int minLength = Integer.MAX_VALUE;
for (String str : strs) {
minLength = Math.min(minLength, str.length());
}
int low = 0;
int high = minLength - 1;
while (low <= high) {
int mid = (low + high) / 2;
boolean allMatch = true;
char c = strs[0].charAt(mid);
for (int i = 1; i < strs.length; i++) {
if (strs[i].charAt(mid) != c) {
allMatch = false;
break;
}
}
if (allMatch) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return strs[0].substring(0, (low + high) / 2 + 1);
}
```
该算法的时间复杂度为O(NMlogM),其中N为字符串数组的长度,M为字符串数组中最短字符串的长度。
用JAVA输入一个字符串查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ““
```
public static String longestCommonPrefix(String[] strs) {
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;
}
```
这段代码使用了水平扫描算法来查找最长公共前缀。首先将第一个字符串作为前缀,然后对于后面的每个字符串,不断地将前缀缩短直到找到一个前缀是当前字符串的前缀为止。如果最终前缀为空,则返回空字符串。如果所有字符串都有相同的前缀,那么最终的前缀就是最长公共前缀。