在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