কম্পিউটার টিউটোরিয়াল

C++-এ O(1) স্পেস ও O(N²) টাইমে এক্সপ্রেশনে ব্যালেন্সড প্যারেনথেসিস চেক করুন


কনসেপ্ট

দেওয়া স্ট্রিং str-এ '(', ')', '{', '}', '[', ']' ক্যারেক্টার থাকলে ব্র্যাকেটগুলো ব্যালেন্সড কিনা তা খুঁজে বের করুন।

ব্র্যাকেটগুলো ব্যালেন্সড যদি:

  • খোলা ব্র্যাকেটগুলো একই টাইপের ব্র্যাকেট দিয়ে বন্ধ হয়।
  • খোলা ব্র্যাকেটগুলো সঠিক অর্ডারে বন্ধ হয়।

ইনপুট − str = "(()){}"

আউটপুট − Yes

ইনপুট − str = "))(([]["

আউটপুট − No

পদ্ধতি

  • দুটি ভেরিয়েবল a এবং b রাখুন দুটি ব্র্যাকেট কমপেয়ার করার জন্য।
  • একটি কাউন্ট রাখুন যা খোলা ব্র্যাকেটে বাড়বে এবং বন্ধ ব্র্যাকেটে কমবে।
  • খোলা ব্র্যাকেট পাওয়া গেলে b=a, a=a+1, count++ করুন।
  • বন্ধ ব্র্যাকেট পাওয়া গেলে count-- করুন এবং i ও j ইন্ডেক্সের ব্র্যাকেট কমপেয়ার করুন:
    • যদি a এবং b-র ব্র্যাকেট ম্যাচ করে, স্ট্রিংয়ে '#' বসিয়ে a বাড়ান এবং b কমান যতক্ষণ না '#' না পাওয়া যায় বা b >= 0।
    • যদি ম্যাচ না করে, false রিটার্ন করুন।
  • শেষে count != 0 হলে false রিটার্ন করুন।

উদাহরণ

#include <iostream> 
using namespace std; 

bool helperFunc(int& count1, string& s1, int& i1, int& j1, char tocom1){ 
    count1--; 
    if (j1 > -1 && s1[j1] == tocom1) { 
        s1[i1] = '#'; 
        s1[j1] = '#'; 
        while (j1 >= 0 && s1[j1] == '#') 
            j1--; 
        i1++; 
        return 1; 
    } 
    else 
        return 0; 
} 

bool isValid(string s1){ 
    if (s1.length() == 0) 
        return true; 
    else { 
        int i1 = 0; 
        int count1 = 0; 
        int j1 = -1; 
        bool result1; 
        while (i1 < s1.length()) { 
            switch (s1[i1]) { 
                case '}': 
                    result1 = helperFunc(count1, s1, i1, j1, '{'); 
                    if (result1 == 0) 
                        return false; 
                    break; 
                case ')': 
                    result1 = helperFunc(count1, s1, i1, j1, '('); 
                    if (result1 == 0) 
                        return false; 
                    break; 
                case ']': 
                    result1 = helperFunc(count1, s1, i1, j1, '['); 
                    if (result1 == 0) 
                        return false; 
                    break; 
                default: 
                    j1 = i1; 
                    i1++; 
                    count1++; 
            } 
        } 
        if (count1 != 0) 
            return false; 
        return true; 
    } 
} 

int main(){ 
    string str1 = "[[]][]()"; 
    if (isValid(str1)) 
        cout << "Yes"; 
    else 
        cout << "No"; 
    return 0; 
}

আউটপুট

Yes

  1. প্রায়োরিটি শিডিউলিং (Priority Scheduling) C++ প্রোগ্রাম

  2. C++ প্রোগ্রাম: স্ট্যাক ব্যবহার করে ব্যালেন্সড প্যারেনথেসিস চেক করা

  3. পাইথনে O(1) স্পেস এবং O(N²) টাইম কমপ্লেক্সিটি দিয়ে ব্যালেন্সড প্যারেনথেসিস যাচাই করুন

  4. পাইথনে ব্যালেন্সড প্যারেনথেসিস চেক করা