题解 | 最长公共前缀
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不会触发,因此需要在函数最后直接返回数组第一个字符串[自己第一次写的答案错在了此处])