Simple Balanced Parentheses

ကၽြန္ေတာ္ တို႔ အေပါင္း အႏႈတ္ အေျမာက္ အစားေတြ လုပ္တဲ့ အခါမွာ ကြင္းစ ကြင္းပတ္ေတြကို အသံုးျပဳပါတယ္။

ဥပမာ။။

(5+6)∗(7+8)/(4+3)

ကၽြန္ေတာ္တို႔ဟာ user က ထည့္လိုက္တဲ့ ကြင္းစ ကြင္းပိတ္ ေတြ မွန္ မမွန္ စစ္ဖို႔ အတြက္ stack ကို အသံုးျပဳၿပီး ေရးပါမယ္။

မွန္ကန္တဲ့ ကြင္းစကြင္းပိတ္ေတြဟာ

(()()()())

(((())))

(()((())()))

လိုမ်ဳိး ျဖစ္ပါလိမ့္မယ္။

((((((())

()))

(()()(()

လိုမ်ဳိးေတြကေတာ့ မွားယြင္းသည္လို႔ သတ္မွတ္ရပါမယ္။

parChecker.py

from stack import Stack def parChecker(symbolString): s = Stack() balanced = True index = 0 while index < len(symbolString) and balanced: symbol = symbolString[index] if symbol == "(": s.push(symbol) else: if s.is_empty(): balanced = False else: s.pop() index = index + 1 if balanced and s.is_empty(): return True else: return False print(parChecker('((()))'))

ဒီ code ကို ကၽြန္ေတာ္တို႔ ေလ့လာၾကည့္ရေအာင္။

ကၽြန္ေတာ္တို႔ stack.py ကို parChecker.py နဲ႔ file ေနရာ အတူတူ ထားဖို႔ လိုပါတယ္။

ဥပမာ။။ parChecker.py ဟာ /Users/python/ မွာ ရွိတယ္ ဆိုရင္ stack.py ဟာလည္း အဲဒီ ေနရာမွာ ရွိဖို႔ လိုပါတယ္။

ဒါမွသာ

from stack import Stack

က အလုပ္လုပ္ပါမယ္။

Python မွာ external file import format က

from filename import ClassName

ဒါေၾကာင့္ class name က Stack ျဖစ္ၿပီး file name က stack.py ျဖစ္သည့္ အတြက္ေၾကာင့္

from stack import Stack

ဆိုၿပီး ေရးထားတာပါ။

parChecker function ထဲမွာ စာလံံုးေရ ရွိသေလာက္ကို ကၽြန္ေတာ္တို႔ေတြ while loop နဲ႔ ပတ္လိုက္တယ္။

ေနာက္ၿပီးေတာ့ balanced က True ျဖစ္ေန သ၍ loop ပတ္ပါတယ္။

balanced က stack empty ျဖစ္ မျဖစ္ စစ္ ဖို႔ အတြက္ပါ။

ၿပီးေတာ့ စာလံုးေတြကို တစ္လံုးျခင္း စီ ယူပါတယ္။ ကၽြန္ေတာ္တို႔ trace လိုက္ၾကည့္ရေအာင္။

ကၽြန္ေတာ္တို႔ ထည့္လိုက္တဲ့ String က (()

ပထမဆံုး စာလံုးက (

symbol = symbolString[index]
if symbol == "(":
    s.push(symbol)
else:
    if s.is_empty():
        balanced = False
    else:
        s.pop()

index = index + 1

ဒါေၾကာင့္ s.push("(") ဝင္သြားပါတယ္။ တကယ္လို႔သာ ပထမဆံုး စာလံုးက ( မဟုတ္ခဲ့ရင္ balanced က False ျဖစ္ၿပီးေတာ့ loop ထဲကေန ထြက္သြားမွာပါ။

ဒုတိယ စာလံုး ( ကို ထပ္ယူတယ္။ push ထပ္လုပ္တယ္။ Array ထဲမွာ အခန္း ၂ ခန္း ျဖစ္သြားၿပီ။

တတိယ စာလံုး ) ကို ယူတယ္။ pop လုပ္တယ္။ Array ထဲမွာ အခန္း ၁ ခန္း က်န္ေသးတယ္။

စာလံုးေရ ကုန္သြားသည့္ အတြက္ loop ထြက္သြားတယ္။

if balanced and s.is_empty():
    return True
else:
    return False

if balanced and s.is_empty(): မွာ ေရးထားသည့္ condition ေၾကာင့္ return False ျပန္ပါတယ္။

ကၽြန္ေတာ္တို႔ေတြဟာ () ကို စစ္သည့္ အခါမွာ အဖြင့္ ႏွင့္ အပိတ္ အႀကိမ္ အေရ အတြက္ တူဖို႔ လိုတယ္။ ဒါေၾကာင့္ ( ကို stack ထဲမွာ push လုပ္ၿပီး ) ကို stack ထဲကေန ျပန္ထုတ္ပါတယ္။ () အေရအတြက္ ညီရင္ ေနာက္ဆံုး stack က empty ျဖစ္သြားပါမယ္။ ေနာက္ၿပီးေတာ့ balanced ကလည္း True ျဖစ္ၿပီးေတာ့ array ထဲကေန ထြက္လာပါလိမ့္မယ္။

results matching ""

    No results matching ""