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

Tìm một điểm bằng nhau trong chuỗi dấu ngoặc bằng C ++.

Ở đây chúng ta sẽ xem cách lấy các điểm bằng nhau trong một chuỗi dấu ngoặc. Điểm bằng nhau là chỉ số I, sao cho số lượng dấu ngoặc mở trước nó bằng số lượng dấu ngoặc đóng sau nó. Giả sử một chuỗi ngoặc giống như “(())) (() () ())))”, nếu chúng ta nhìn gần hơn, chúng ta có thể nhận được

Tìm một điểm bằng nhau trong chuỗi dấu ngoặc bằng C ++.

Vì vậy, số lượng dấu ngoặc mở từ 0 đến 9 là 5 và số lượng dấu ngoặc đóng từ 9 đến 14 cũng là 5, vì vậy đây là điểm bằng nhau.

Để giải quyết vấn đề này, chúng ta phải làm theo một số bước sau -

  • Lưu trữ số lượng dấu ngoặc mở xuất hiện trong chuỗi lên đến mọi chỉ mục i
  • Lưu trữ số lượng dấu ngoặc đóng xuất hiện trong chuỗi lên đến từng và mọi chỉ mục I nhưng việc này phải được thực hiện từ chỉ mục cuối cùng.
  • Kiểm tra xem một chỉ mục có cùng giá trị mở và đóng ngoặc hay không.

Ví dụ

#include<iostream>
#include<cmath>
using namespace std;
int findEqualPoint(string str) {
   int total_length = str.length();
   int open[total_length+1] = {0}, close[total_length+1] = {0};
   int index = -1;
   open[0] = 0;
   close[total_length] = 0;
   if (str[0]=='(') //check whether first bracket is opening or not, if so mark open[1] = 1
   open[1] = 1;
   if (str[total_length-1] == ')') //check whether first bracket is closing or not, if so mark       close[end] = 1
   close[total_length-1] = 1;
   for (int i = 1; i < total_length; i++) {
      if ( str[i] == '(' )
      open[i+1] = open[i] + 1;
   else
      open[i+1] = open[i];
   }
   for (int i = total_length-2; i >= 0; i--) {
      if ( str[i] == ')' )
         close[i] = close[i+1] + 1;
      else
         close[i] = close[i+1];
   }
   if (open[total_length] == 0)
      return total_length;
   if (close[0] == 0)
      return 0;
   for (int i=0; i<=total_length; i++)
      if (open[i] == close[i])
      index = i;
   return index;
}
int main() {
   string str = "(()))(()()())))";
   cout << "Index of equal point: " << findEqualPoint(str);
}

Đầu ra

Index of equal point: 9