最长公共前缀
题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母a-z。
解题思路
个人AC
依次遍历每个字符串的第i个位置,当:
i超过某个字符串长度;- 某个字符串的第
i个字符其他字符串不等
时,返回公共前缀,否则将这第i字符放入公共前缀中,i++。
class Solution {
public String longestCommonPrefix(String[] strs) {
StringBuilder prefix = new StringBuilder("");
if (strs == null || strs.length == 0) {
return prefix.toString();
}
int i = 0;
while (true) {
char last = '\u0000';
for (String str : strs) {
if (i == str.length()) {
return prefix.toString();
} else if (last == '\u0000') {
last = str.charAt(i);
} else if (last != str.charAt(i)) {
return prefix.toString();
}
}
prefix.append(strs[0].charAt(i));
i++;
}
}
}
时间复杂度: O ( s ) O(s) O(s),s为字符串数组中所有字符数之和;
空间复杂度: O ( 1 ) O(1) O(1)。
最优解
同上。

本文深入探讨了寻找字符串数组中最长公共前缀的问题,提供了一种有效的算法实现,通过遍历每个字符串的对应位置字符,比较并确定公共前缀,直至遇到不匹配或超出字符串长度的情况。该算法的时间复杂度为O(s),空间复杂度为O(1)。
1633

被折叠的 条评论
为什么被折叠?



