题目链接:https://leetcode.com/problems/check-if-word-is-valid-after-substitutions/
解题思路:一开始想到的是用递归解题,这个思路好理解,若找到了"abc"子串,则将子串删除,然后判断删除后的字符串是否valid,但是运行超时,分析时间复杂度是O(n)*递归函数复杂度
,于是选择舍弃递归做法,将时间复杂度降低至O(n)
,运行通过,虽然success了,但是同提交结果上看 faster than 5.04%,因此此题有低于O(n)时间复杂度的算法,暂时先不探索.
注:因为题目限定的字符串长度的范围是[1,20000],但是符合valid的字符串长度必须是3的整数倍.
代码:
bool isValid(string S) {
int len=S.size(),tmp=len;
int ret=0;
for(int i=0;i<len;i++){
if(S.substr(i,3)=="abc"){
S.erase(i,3);
len=len-3;
ret++;
i=-1;
}
}
cout<<ret<<" "<<tmp<<endl;
return tmp%3==0&&ret==tmp/3;
}