在C ++中替换后检查Word是否有效
假设我们给定字符串“abc”有效。因此,可以从任何有效的字符串V中将V分为X和Y两部分,以使X+Y与V相同(X或Y可以为空)。然后,X+“abc”+Y也有效。因此,例如S=“abc”,则有效字符串的示例为:“abc”,“aabcbc”,“abcabc”,“abcabcababcc”。无效字符串的一些示例是:“abccba”,“ab”,“cababc”,“bac”。仅当给定的字符串S有效时,我们才必须检查true。
因此,如果输入类似于“abcabcababcc”,则该输入有效,因此输出为true。
为了解决这个问题,我们将遵循以下步骤-
定义一个堆栈st
对于0到S大小的i
将c插入st
而st>=3的大小
按a,然后按b,然后按c进入st,并打破循环
c:=st的顶部,并从st弹出顶部的元素
b:=st的顶部,并从st弹出顶部的元素
a:=st的顶部,并从st弹出顶部的元素
temp:=temp与一个
temp:=temp与b连接
temp:=temp与c连接
如果temp为“abc”,则进行下一次迭代
除此以外
如果st为空或S[i]与'c'不同,则将S[i]压入堆栈
除此以外
如果st为空,则返回true,否则返回false
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h> using namespace std; class Solution { public: bool isValid(string S) { stack <char> st; for(int i = 0; i < S.size(); i++){ if(st.empty() || S[i] != 'c'){ st.push(S[i]); }else{ st.push('c'); while(st.size() >= 3){ char c = st.top(); st.pop(); char b = st.top(); st.pop(); char a = st.top(); st.pop(); string temp = ""; temp += a; temp += b; temp += c; if(temp == "abc"){ continue; }else{ st.push(a); st.push(b); st.push(c); break; } } } } return st.empty(); } }; main(){ Solution ob; cout << (ob.isValid("abcabcababcc")); }
输入值
“abcabcababcc”
输出结果
1