मान लीजिए हमारे पास एक स्ट्रिंग str है जिसमें ये ब्रैकेट हैं: '(', ')', '{', '}', '[' और ']'। हमें जांचना है कि ब्रैकेट संतुलित हैं या नहीं। हम कह सकते हैं कि ब्रैकेट संतुलित हैं जब:
- ओपनिंग और क्लोजिंग ब्रैकेट का प्रकार समान हो।
- ब्रैकेट सही क्रम में बंद हों।
इसलिए, यदि इनपुट {([])} है, तो आउटपुट True होगा।
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
cnt := 0,i := 0,j := -1प्रारंभ करें।solve()फ़ंक्शन परिभाषित करें जोs,tempलेता है।cnt := cnt - 1करें।sको एक नई सूची में बदलें।- यदि
j > -1औरs[j] == temp, तो:s[i] := '#',s[j] := '#'- जब तक
j >= 0औरs[j] == '#',j := j - 1करें। i := i + 1- 1 लौटाएं।
- अन्यथा, 0 लौटाएं।
- मुख्य विधि से:
- यदि
sका आकार 0 है, तो True लौटाएं। - अन्यथा:
ans := False- जब तक
i < len(s):- यदि
s[i] == '}', तोans := solve(s, '{'); यदिans == 0तो False लौटाएं। - अन्यथा यदि
s[i] == ')', तोans := solve(s, '('); यदिans == 0तो False लौटाएं। - अन्यथा यदि
s[i] == ']', तोans := solve(s, '['); यदिans == 0तो False लौटाएं। - अन्यथा:
j := i,i := i + 1,cnt := cnt + 1
- यदि
- यदि
cnt != 0, तो False लौटाएं। - True लौटाएं।
- यदि
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
cnt = 0
i = 0
j = -1
def solve(s, temp):
global i, j, cnt
cnt -= 1
s = list(s)
if j > -1 and s[j] == temp:
s[i] = '#'
s[j] = '#'
while j >= 0 and s[j] == '#':
j -= 1
i += 1
return 1
else:
return 0
def bracketOrderCheck(s):
global i, j, cnt
if len(s) == 0:
return True
else:
ans = False
while i < len(s):
if s[i] == '}':
ans = solve(s, '{')
if ans == 0:
return False
elif s[i] == ')':
ans = solve(s, '(')
if ans == 0:
return False
elif s[i] == ']':
ans = solve(s, '[')
if ans == 0:
return False
else:
j = i
i += 1
cnt += 1
if cnt != 0:
return False
return True
print(bracketOrderCheck("{([])}"))
इनपुट
"{(()[])}"
आउटपुट
True