当前位置: 首页 > 知识库问答 >
问题:

leetcode 394的时间复杂度

端木望
2023-03-14
class Solution {
public:
    string decodeString(string s) {
        stack<string> chars;
        stack<int> nums;
        string res;
        int num = 0;
        for(char c : s) {
            if(isdigit(c)) {
                num = num*10 + (c-'0');                              
            }
            else if(isalpha(c)) {
                res.push_back(c);                
            }
            else if(c == '[') {
                chars.push(res);
                nums.push(num);
                res = "";
                num = 0;
            }
            else if(c == ']') {
                string tmp = res;
                for(int i = 0; i < nums.top()-1; ++i) {
                    res += tmp;
                }
                res = chars.top() + res;
                chars.pop(); nums.pop();
            }
        }
        return res;
     }
};


输入:3[AB4[c]]

简单地说,复杂度是不是3*(len(ab)+4*(len(c)),我说的对吗?

共有1个答案

苏野
2023-03-14

我想,虽然不太确定,但你有点对。这可能被认为是O(N),因为这些系数不会有太大的影响。

只是另一个版本:

#include <string>

class Solution {
public:
    std::string decodeString(const std::string &base_string, int &index) {
        std::string decoded;

        while (index < base_string.length() && base_string[index] != ']') {
            if (!std::isdigit(base_string[index])) {
                decoded += base_string[index++];

            } else {
                int full_num = 0;

                while (index < base_string.length() && std::isdigit(base_string[index])) {
                    full_num = full_num * 10 + base_string[index++] - 48;
                }

                index++;
                std::string character = decodeString(base_string, index);
                index++;

                while (full_num-- > 0) {
                    decoded += character;
                }
            }
        }

        return decoded;
    }

    std::string decodeString(std::string s) {
        int index = 0;
        return decodeString(s, index);
    }
};
  • 有关其他详细信息,请参阅讨论板。这里有许多公认的解决方案、解释、各种语言的高效算法,以及渐近的时间/空间复杂性分析。
 类似资料:
  • 主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内

  • 有人能帮我了解一下这个代码片段的时间和空间复杂性吗?请参考leetcode问题-单词中断II。给定一个非空字符串s和一个包含非空单词列表的字典单词dict,在s中添加空格来构造一个句子,其中每个单词都是有效的字典单词。返回所有这些可能的句子。

  • 假设T是具有n个节点和高度h的二叉查找树。T的每个节点x存储一个实数x。键。给出以下算法Func1(T. root)的最坏情况时间复杂度。你需要证明你的答案。 x.left() 对于最坏情况下的运行时,我认为这将是O(树的高度),因为这基本上类似于最小()或最大()二元搜索树算法。然而,它是递归的,所以我对是否将O(h)作为最坏的运行时编写有点犹豫。 当我考虑它时,最坏的情况是如果函数执行if(s

  • 问题内容: 是Java中的数组还是列表?什么是get操作的时间复杂度,是它还是? 问题答案: 一个在Java是一种由一个支持。 该方法是恒定时间的操作。 直接从Java库获取以下代码: 基本上,它只是直接从后备数组中返回一个值。()也是固定时间)

  • Java中Math.sqrt实现的时间复杂性是什么?Java在某种技术中实现了时间复杂性,我正在试图确定这些技术的时间复杂性。

  • 我遇到了单词中断问题,它是这样的: 给定一个输入字符串和一个字典,如果可能,将输入字符串分割成一个空间分隔的字典单词序列。 然而,在Quora中,一个用户发布了一个线性时间解决方案 我不知道它怎么会是线性的。他们在时间复杂度计算上有什么错误吗?这个问题的最佳可能最坏情况时间复杂度是多少。我在这里发布了最常见的DP解决方案