Computer >> Máy Tính >  >> Lập trình >> C ++

Độ dài tối đa của chuỗi cân bằng sau khi hoán đổi và xóa các ký tự trong C ++

Chúng tôi được cung cấp một chuỗi chỉ chứa các ký tự (,), {,}, [,]. Mục đích là để tìm độ dài tối đa của chuỗi như vậy để nó trở nên cân bằng bằng cách hoán đổi các ký tự liền kề hoặc loại bỏ một ký tự. Chúng tôi sẽ làm điều này bằng cách so sánh các ký tự liền kề, nếu chúng đối lập với nhau thì chúng có thể được hoán đổi. (} {,) (,] [có thể được hoán đổi, trong khi {{,)), [[,}},)),]] không thể được hoán đổi).

Ngoài ra, nếu một ký tự không có cặp phù hợp, thì nó cũng có thể bị xóa. (“{{}] [“, Ở đây trước tiên {có thể được xóa và độ dài chuỗi cân bằng trở thành 4)

Đầu vào

 str [] =“{{{}} {]]] [()” chiều dài 12 

Đầu ra

 Độ dài tối đa của chuỗi số dư:8 

Giải thích - Không thể hoán đổi str [0] và str [1], xóa str [0] =“{{}} {]]] [()” Không thể hoán đổi str gốc [1] và str [2], xóa str [ 1] =“{}} {]]] [()” {} được cân bằng} {có thể được hoán đổi, loại bỏ tiếp theo 2]], hoán đổi] [và () cũng được cân bằng Chuỗi cuối cùng là {} {} [] ( ). Chiều dài là 8.

Đầu vào

 str [] =“((((()” chiều dài 7 

Đầu ra

 str [] =“((((()” chiều dài 7 

Giải thích - Chỉ str [5] và str [6] là cân bằng, loại bỏ tất cả. Chuỗi cuối cùng (). Chiều dài là 2

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Mảng ký tự str [] lưu chuỗi gốc. Integer Length lưu trữ độ dài của chuỗi.

  • Hàm maxBalancedStr (char str [], int len) lấy chuỗi và tham số độ dài của nó và trả về độ dài tối đa của chuỗi cân bằng.

  • Số lượng biến được sử dụng để lưu trữ độ dài của chuỗi như vậy, ban đầu là 0.

  • Bắt đầu duyệt qua chuỗi từ ký tự đầu tiên và kiểm tra xem ký tự liền kề có thể được tách rời để làm cho cả hai ký tự cân bằng hay không. Hoặc nếu chúng đã được cân bằng, hãy tăng số tiền lên 2.

  • Thực hiện việc này đối với các cặp như, (),) (và {},} {và [],] [, tăng dần i nếu các cặp như vậy tồn tại, để chuyển sang ký tự tiếp theo.

  • Cuối cùng, số đếm lưu trữ độ dài của chuỗi cân bằng.

  • Kết quả là số lượt trả lại.

Ví dụ

 // triển khai C ++ của phương thức # include  sử dụng không gian tên std; // Hàm trả về độ dài của // chuỗi con cân bằng dài nhất. maxBalancedStr (char str [20], int len) {int count =0; // Duyệt qua chuỗi for (int i =0; i  

Đầu ra

 4