题解 | 最长公共前缀
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param strs string字符串一维数组
* @return string字符串
*/
public String longestCommonPrefix (String[] strs) {
//遍历所有字符串,在每个字符串中拿到第一个字符,判断所有的字符是否相同,都相同的话记下索引
//公共的字符串长度不可能超过任何一个字符串的长度,我们以第一个字符串的长度来作为外层循环进行遍历每个字符
if (strs == null || strs.length == 0) {
return "";
}
String fir = strs[0];
int n = fir.length();
int strsLen = strs.length;
for (int i = 0; i < n; i++) {
char curr = fir.charAt(i);
for (int j = 1; j < strsLen; j++) {
String nextStr = strs[j];
if (nextStr.length() < i + 1) {
return fir.substring(0, i);
}
char next = strs[j].charAt(i);
if (curr != next) {
return fir.substring(0, i);
}
}
}
return strs[0];
}
}
注意考虑输入参数的几种特殊情况:
1、字符串数组为空
2、字符串数组存在一个空串
3、字符串数组存在两个空串
4、字符串数组存在一个字符串(根据上题,仅有一个字符串时不会进入第二个for循环,因此循环中的return不会触发,因此需要在函数最后直接返回数组第一个字符串[自己第一次写的答案错在了此处])
查看1道真题和解析