C++ 正则表达式匹配的时间复杂度

C++ 正则表达式匹配的时间复杂度,c++,algorithm,time-complexity,C++,Algorithm,Time Complexity,我正在解决leetcode上正则表达式匹配的问题。我使用递归解决了它,如下所示: if (p.empty()) return s.empty(); if ('*' == p[1]) // x* matches empty string or at least one character: x* -> xx* // *s is to ensure s is non-empty return (isMatch(s,

我正在解决leetcode上正则表达式匹配的问题。我使用递归解决了它,如下所示:

    if (p.empty())    return s.empty();
    
    if ('*' == p[1])
        // x* matches empty string or at least one character: x* -> xx*
        // *s is to ensure s is non-empty
        return (isMatch(s, p.substr(2)) || !s.empty() && (s[0] == p[0] || '.' == p[0]) && isMatch(s.substr(1), p));
    else
        return !s.empty() && (s[0] == p[0] || '.' == p[0]) && isMatch(s.substr(1), p.substr(1));
但是在这里,我怎样才能找到代码的时间复杂性呢

问题链接:

PS:在解决方案中,他们解释了时间复杂度,但我无法理解。

假设
T(T,p)
是函数的时间复杂度
isMatch(text,pattern)
其中T是
text.length()
而p是
pattern.length()/2

第一个
T(x,0)=1

然后如果模式[1]='*'
T(T,p)=T(T,p-1)+T(T-1,p)+O(T+p)

否则
T(T,p)=T(T-1,p-0.5)+O(T+p)

显然,第一种情况更糟

思考
T
的组合含义。 最初,球是您在坐标
(t,p)
上的球,一步即可将其移动到
(t-1,p)
(t,p-1)
,成本
t+p
。 球停在轴上。 然后
T(T,p)
等于从
(T,p)
开始将球移动到轴的每种有效方式的总成本

那我们就知道了

所以总的时间复杂度是
O((t+p)2^(t+p/2))

顺便说一句,如果您使用类似于
std::string\u view
的东西,而不是
.substr()
,这样可以防止复制整个字符串,那么您的代码将运行得更快。

假设
T(T,p)
是函数的时间复杂度
isMatch(text,pattern)
其中T是
text.length(),p是
pattern.length()/2

第一个
T(x,0)=1

然后如果模式[1]='*'
T(T,p)=T(T,p-1)+T(T-1,p)+O(T+p)

否则
T(T,p)=T(T-1,p-0.5)+O(T+p)

显然,第一种情况更糟

思考
T
的组合含义。 最初,球是您在坐标
(t,p)
上的球,一步即可将其移动到
(t-1,p)
(t,p-1)
,成本
t+p
。 球停在轴上。 然后
T(T,p)
等于从
(T,p)
开始将球移动到轴的每种有效方式的总成本

那我们就知道了

所以总的时间复杂度是
O((t+p)2^(t+p/2))

顺便说一句,如果您使用类似于
std::string\u view
的内容,而不是
.substr()
,则代码将运行得更快,这会阻止复制整个字符串