思路

  • 特判:如果参数strs的长度为0, 则直接返回空字符串("");
  • 设字符串res为最终要返回的公共前缀, res初始化为strs[0];
  • 循环比较res和其余的各个字符串
    • 设len为当前字符串strs[i]和res中的较小者:
    • 从0~len依次比较res和strs[i]中的字符, 设前比较的位置为j(初始为0)
      • 如果res[j] == strs[i][j], 则继续比较;
      • 否则跳出循环
    • 循环结束时,如果j == 0, 则说明strs[i]和res的第一个字符都不相等,则strs中所有的字符串无公共前缀;否则更新res,更新规则是res和strs[i]中相等部分的较短的串。
class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(strs.size() == 0)
            return "";
        string res = strs[0];
        for(int i = 1; i < strs.size(); ++i) {
            int len = std::max(strs[i].size(), res.size());
            int j = 0;
            while(len >= 0) {
                if(strs[i][j] == res[j]) {
                    ++j;
                    --len;
                } else {
                    break;
                }
            }
            if(j == 0)
                return "";
            res = res.size() > j ? strs[i].substr(0,j): res;
        }
        return res;
    }
};