题目描述
给定有效字符串"abc"
对于任何有效的字符串V,我们可以将V分成两个部分X和Y,使得X + Y(X和Y连接)等于V。(X或Y可以为空),那么,X+"abc"+Y也同样是有效的。
例如,如果S = "abc",则有效字符串的示例是:"abc","aabcbc","abcabc","abcabcababcc"。无效字符串示例是:"abccba", "ab", "cababc", "bac"。
给定字符串S有效,则返回true;否则,返回false
示例1
输入:"aabcbc"
输出:true
解释:
从有效字符串"abc"开始,然后我们可以在"a"和"bc"之间插入另一个"abc",产生"a" + "abc" + "bc",即"aabcbc"
示例2
输入:"abcabcababcc"
输出:true
解释:
"abcabcababcc"是有效的,他可以视作是在原串后连续插入"abc"。
然后我们可以在最后一个字母之前插入"abc",产生"abcabcab" + "abc" + "c",即"abcabcababcc"
示例3
输入:"abccba"
输出:false
示例4
输入:"cababc"
输出:false
解题思路
可以理解成不断在S中查找"abc",然后删除"abc"形成新的字串S,重复查找"abc",当找不到"abc"并且S不为空时返回false,否则返回true。
bool isValid(string S) {
int idx;
string str = S;
idx = str.find("abc");
while(idx != string::npos){
int len = str.length();
str = "";
str = S.substr(0,idx - 0);
if(idx + 3 < len)
str += S.substr(idx + 3,len - idx - 3);
idx = str.find("abc");
S = str;
}
if(str != "") return false;
return true;
}