以示例1为例
从左到右依次比较每个字符:
- 第一个字符都是'f',当前最长公共前缀为"f"
- 第二个字符都是'l',当前最长公共前缀更新为"fl"
- 第三个字符不一致,因此最终最长公共前缀确定为"fl"
具体实现思路:
- 以任意一个单词(如第一个)作为初始公共前缀
- 将该前缀与其余单词逐字符比较
- 当出现字符不匹配或达到某个单词长度时,当前前缀即为最终结果
- 若全部匹配完成,则该单词本身就是最长公共前缀
class Solution {
public:string longestCommonPrefix(vector<string>& strs) {string s0 = strs[0];for (int j = 0;j < s0.size();j++) {for (string &s : strs) {if (j == s.size() || s0[j] != s[j]) {return s0.substr(0,j);}}}return s0;}
};
时间复杂度:O(mn),m为strs中最短单词的长度,n为s0长度
空间复杂度:O(1)