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