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

ความยาวสูงสุดของสตริงที่สมดุลหลังจากการสลับและลบอักขระใน C++


เราได้รับสตริงที่มีอักขระ (,),{,},[,] เท่านั้น เป้าหมายคือการหาความยาวสูงสุดของสตริงดังกล่าวเพื่อให้สมดุลโดยการสลับอักขระที่อยู่ติดกันหรือลบอักขระ เราจะทำสิ่งนี้โดยการเปรียบเทียบอักขระที่อยู่ติดกัน หากพวกมันอยู่ตรงข้ามกันก็สามารถสลับกันได้ ( }{,)(,][ สามารถสลับได้ ในขณะที่ {{,)),[[,}},)),]] ไม่สามารถสลับได้ )

นอกจากนี้หากตัวละครไม่มีคู่ที่ตรงกันก็สามารถลบออกได้เช่นกัน ( “{{}][“ ก่อนอื่น { สามารถลบออกได้และความยาวของสตริงที่สมดุลกลายเป็น 4 )

อินพุต

str[]=“ {{{}}{]]][()" ความยาว 12

ผลลัพธ์

ความยาวสูงสุดของสตริงยอดคงเหลือ:8

คำอธิบาย − str[0] และ str[1] ไม่สามารถสลับกันได้ ลบ str[0]=“{{}}{]]][()” str[1] ดั้งเดิม และ str[2] ออกไม่ได้ ให้ลบ str[ 1]=“{}}{]]][()” {} มีความสมดุล }{ สามารถสลับ, ลบถัดไป 2 ]], swap ][ และ () มีความสมดุลเช่นกัน สตริงสุดท้ายคือ {}{}[]( ). ความยาว 8

อินพุต

str[]=“((((()” ความยาว 7

ผลลัพธ์

str[]=“((((()” ความยาว 7

คำอธิบาย − เฉพาะ str[5] และ str[6] เท่านั้นที่สมดุล ลบทั้งหมด สตริงสุดท้าย (). ความยาว 2

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • อาร์เรย์อักขระ str[] เก็บสตริงเดิม Integer Length เก็บความยาวของสตริง

  • ฟังก์ชัน maxBalancedStr (char str[], int len) รับสตริงและแอสพารามิเตอร์ความยาว และส่งคืนค่าความยาวสูงสุดของสตริงที่สมดุล

  • การนับตัวแปรใช้เพื่อเก็บความยาวของสตริงดังกล่าว โดยเริ่มแรกเป็น 0

  • เริ่มสำรวจสตริงจากอักขระตัวแรกและตรวจสอบว่าสามารถสลับอักขระที่อยู่ติดกันเพื่อให้ทั้งคู่มีความสมดุลหรือไม่ หรือถ้าสมดุลแล้ว ก็เพิ่มจำนวนขึ้น 2

  • ทำสิ่งนี้สำหรับคู่เช่น (),)( และ {},}{ และ [],][, เพิ่มขึ้นฉันยังถ้ามีคู่ดังกล่าวเพื่อย้ายไปยังตัวละครถัดไป

  • ในที่สุดการนับจะเก็บความยาวของสตริงที่สมดุล

  • ผลตอบแทนนับเป็นผลลัพธ์

ตัวอย่าง

// การใช้ C++ ของแนวทาง #include  โดยใช้เนมสเปซ std;// ฟังก์ชันเพื่อส่งคืนความยาวของ// สตริงย่อยที่สมดุลที่ยาวที่สุด maxBalancedStr(char str[20], int len) { จำนวนเต็ม =0; // ข้ามสตริงสำหรับ (int i =0; i  

ผลลัพธ์

4