ढेर ट्रैक रखने के लिए के रूप में एक सरणी का उपयोग करें अनसुलझे उद्घाटन ब्रेसिज़:
function checkParanthesis(str){
var stack=[];
for(var i=0; i<str.length; i++){
if(str[i] == "(" || str[i] == "{" || str[i] == "[")
stack.push(str[i]);
else if(str[i] == ")") {
if(stack.pop() != "(") { return false; }
}
else if(str[i] == "}") {
if(stack.pop() != "{") { return false; }
}
else if(str[i] == "]") {
if(stack.pop() != "[") { return false; }
}
}
return !stack.length;
}
आप शायद इस अधिक पठनीय होने के लिए साफ कर सकते हैं, लेकिन मूल रूप:
- हर बार जब आप एक उद्घाटन ब्रेस मिल जाए, ढेर में जोड़ें।
- हर बार जब आप एक बंद ब्रेस देखते हैं, तो ढेर को पॉप करें और देखें कि स्टैक का शीर्ष एक मिलान करने वाला उद्घाटन ब्रेस है या नहीं।
- यदि ऐसा नहीं है, तो आपके पास कोई मेल नहीं है, तो आप तुरंत
false
वापस कर सकते हैं।
- आप समाप्त करने के लिए यह करते हैं, तो आप, किसी भी त्रुटि का पता नहीं था लौटने
true
अगर ढेर खाली है (अर्थात, stack.length
0
है)।
(ध्यान दें, क्योंकि यह String.prototype
पर गुण से अधिक पुनरावृति जाएगा मैं भी अपने i in str
पाश बदल दिया है।)
एक सफाई तुम कर सकते हो (लेकिन मुझे यकीन नहीं कर रहा हूँ अगर यह कोड अधिक पठनीय है या नहीं करता है) ब्रेस जोड़ी को ऑब्जेक्ट में रखना होगा, बंद चरित्र के साथ कुंजी और संबंधित उद्घाटन चरित्र के रूप में मूल्य के रूप में। तो फिर, अगर वर्तमान चरित्र एक महत्वपूर्ण in
वस्तु के रूप में मौजूद है देखते हैं, और यदि हां, तो ढेर पॉप और अगर उस कुंजी मैचों के लिए मूल्य देखें: एक काउंटर
function checkParanthesis(str){
var stack=[];
var brace_pairings = { ")":"(", "}":"{", "]":"[" };
for(var i=0; i<str.length; i++){
if(str[i] == "(" || str[i] == "{" || str[i] == "[") {
stack.push(str[i]);
} else if(str[i] in brace_pairings) {
if(stack.pop() != brace_pairings[str[i]]) { return false; }
}
}
return !stack.length;
}
अंतिम विवरण अनावश्यक है, एक सामान्य जांच है कि मूल्य '! == 0' पर्याप्त होगा। –
ठीक किया गया! धन्यवाद @RyanMcCullagh – TechnoCorner
आपको शुरुआती ब्रेसिज़ का ट्रैक रखना होगा ताकि आप सुनिश्चित कर सकें कि एक बंद वाला सबसे हालिया अभी भी खुला है। – Ryan