Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตรวจสอบว่า Word ถูกต้องหลังจากการแทนที่ใน C ++


สมมติว่าเราได้รับสตริง "abc" ที่ถูกต้อง ดังนั้นจากสตริง V ที่ถูกต้องใดๆ เราสามารถแบ่ง V ออกเป็นสองส่วน X และ Y โดยที่ X + Y จะเหมือนกับ V (X หรือ Y อาจว่างเปล่า) จากนั้น X + "abc" + Y ก็ใช้ได้เช่นกัน ตัวอย่างเช่น S ="abc" ตัวอย่างของสตริงที่ถูกต้อง ได้แก่ "abc", "aabcbc", "abcabc", "abcabcababcc" และตัวอย่างของสตริงที่ไม่ถูกต้อง ได้แก่ "abccba", "ab", "cababc", "bac" เราต้องตรวจสอบว่าจริงหรือไม่ก็ต่อเมื่อสตริงที่กำหนด S ถูกต้อง

ดังนั้นหากอินพุตเป็นเหมือน “abcabcababcc” แสดงว่าถูกต้อง ดังนั้นเอาต์พุตจะเป็นจริง

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดสแต็ก st

  • สำหรับผมอยู่ในช่วง 0 ถึงขนาด S

    • หาก st ว่างเปล่าหรือ S[i] ไม่เหมือนกับ 'c' ให้กด S[i] ลงในสแต็ก

    • อย่างอื่น

      • ใส่ c ลงใน st

      • ในขณะที่ขนาดของ st>=3

        • c :=ด้านบนของ st และเปิดองค์ประกอบด้านบนจาก st

        • b :=ด้านบนของ st และเปิดองค์ประกอบด้านบนจาก st

        • a :=ด้านบนของ st และเปิดองค์ประกอบด้านบนจาก st

        • temp :=temp เชื่อมกับ a

        • temp :=temp เชื่อมกับ b

        • temp :=temp เชื่อมกับ c

        • ถ้า temp เป็น “abc” ให้ทำซ้ำต่อไป

        • อย่างอื่น

          • ดัน a แล้วก็ b แล้วก็ c เป็น st แล้วทำลายลูป

    • คืนค่า จริง เมื่อ st ว่างเปล่า มิฉะนั้น คืนค่า เท็จ

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#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