arrays - 对于字符串数组中最长的公共(public)前缀字符串,此解决方案的时间复杂度是多少?

标签 arrays algorithm big-o

这是问题陈述-

编写一个函数来查找字符串数组中最长的公共(public)前缀字符串。

我不确定下面我的解决方案的时间复杂度。我猜它是 O(nmnlogn)。 nlogn 用于排序,n*m 用于遍历数组,并对字符串进行 m 比较。

string longestCommonPrefix(vector<string>& strs) {
    if(strs.size() == 0) return "";

    sort(strs.begin(), strs.end());

    string prefix = strs[0];
    int length = prefix.length();
    for (int i = 0; i < strs.size(); ++i) {
        if (prefix == strs[i].substr(0, length)) continue;
        if (prefix != strs[i].substr(0, length)) {
            prefix = prefix.substr(0, --length);
            length = prefix.length();
            i = 0;
        }
        if (prefix == "") break;
    }

    return prefix;
}

最佳答案

假设排序后的所有内容都是 O(nm),那么它将是 O(nlogn + nm)(因为您只进行了一次排序),这可能可以根据 m 之间的关系进一步简化并登录。

关于arrays - 对于字符串数组中最长的公共(public)前缀字符串,此解决方案的时间复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39794887/

相关文章:

javascript - 如何使用 Express.js 中的值数组和准备好的语句来更新 MySQL 中的表?

python - 井字游戏和 Minimax AI

python - 为什么这个内存功能不能在线性时间内运行?

algorithm - Summation(n) Theta(n^2) 根据其公式如何计算,但 Theta(n) ij 我们只是将其视为单个 for 循环?

c - 此代码示例的时间复杂度

arrays - 面试问题,他们想要完成什么?

PHP - 如何将数组插入特定位置?

javascript - 将php数组获取到js数组中

algorithm - 打印一个字符串真的需要 O(n) 吗?

algorithm - 使用 python 检查有效的信用卡号