মূল কনটেন্টে যান
🧩
লোকাল DSA
প্যাটার্নটপিক 4 · Stacks & Queues

4.2 Expression Evaluation / Parentheses

চিনবেন কীভাবে
"valid parentheses", "evaluate expression", nesting/matching, infix/postfix, "backspace" — খোলা জিনিস stack-এ রাখুন, বন্ধ হলে match করে pop
Demo · approach · কোড — আগে নিজে চেষ্টা, আটকালে খুলুন

Demo: Longest Valid ParenthesesLC 32 (Hard — Google High)

Statement (Demo): শুধু '('')' দিয়ে গঠিত string s দেওয়া — সবচেয়ে দীর্ঘ valid parentheses substring-এর দৈর্ঘ্য বের করুন। উদাহরণ: s=")()())"4 | ⚡ len ≤ 3×10⁴

Approach: stack-এ index রাখুন, নিচে একটা base হিসেবে -1। ( এলে push; ) এলে pop — pop-এর পর stack খালি হলে এই ) টা নতুন base, নাহলে বর্তমান valid দৈর্ঘ্য = i - stack.top

function longestValidParentheses(s) {
  const stack = [-1]; // base index
  let best = 0;
  for (let i = 0; i < s.length; i++) {
    if (s[i] === "(") stack.push(i);
    else {
      stack.pop();
      if (stack.length === 0)
        stack.push(i); // নতুন base
      else best = Math.max(best, i - stack[stack.length - 1]);
    }
  }
  return best;
}

Complexity: Time O(n), Space O(n)

প্রবলেম

  • Statement: শুধু '(', ')', '{', '}', '[', ']' দিয়ে গঠিত string s দেওয়া — সব bracket সঠিক ক্রমে বন্ধ হয়েছে কিনা true/false বলুন।
    উদাহরণ: s="()[]{}"true | ⚡ len ≤ 10⁴

    নোট · ফাঁকা
  • Backspace String CompareLC 844
    (stack, বা O(1) space-এ পেছন থেকে two pointers)

    Statement: দুটো string st দেওয়া (যেখানে # = backspace)। text editor-এ type করার পর দুটো string সমান হবে কিনা বলুন।
    উদাহরণ: s="ab#c", t="ad#c"true (দুটোই "ac") | ⚡ len ≤ 200

    নোট · ফাঁকা