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

ค้นหาจุดเท่ากันในสตริงวงเล็บโดยใช้ C++


ที่นี่เราจะมาดูวิธีรับคะแนนเท่ากันในวงเล็บ จุดเท่ากันคือดัชนี I เพื่อให้จำนวนวงเล็บเปิดก่อนหน้านั้นเท่ากับจำนวนวงเล็บปิดหลังจากนั้น สมมติว่าวงเล็บปีกกาเหมือน “(()))(()()())))” หากเราเห็นใกล้กว่านี้ เราก็จะได้

ค้นหาจุดเท่ากันในสตริงวงเล็บโดยใช้ C++

ดังนั้นจำนวนวงเล็บเปิดตั้งแต่ 0 ถึง 9 คือ 5 และจำนวนวงเล็บปิดตั้งแต่ 9 ถึง 14 ก็เป็น 5 ด้วย ดังนั้นนี่คือจุดเท่ากัน

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

  • จัดเก็บจำนวนวงเล็บเปิดปรากฏในสตริงจนถึงทุกดัชนี i
  • เก็บจำนวนวงเล็บปิดที่ปรากฏในสตริงจนถึงแต่ละดัชนี I แต่ควรทำจากดัชนีสุดท้าย
  • ตรวจสอบว่าดัชนีมีค่าเท่ากับวงเล็บเปิดและวงเล็บปิดหรือไม่

ตัวอย่าง

#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);
}

ผลลัพธ์

Index of equal point: 9