js判斷括號(hào)是否合法
在編程中,判斷括號(hào)是否合法是一個(gè)常見的問題。例如,對于表達(dá)式"(a b)*(c-d)",我們希望能夠通過程序來驗(yàn)證其中的括號(hào)是否匹配正確。本文將介紹使用JavaScript實(shí)現(xiàn)括號(hào)合法性判斷的方法。一
在編程中,判斷括號(hào)是否合法是一個(gè)常見的問題。例如,對于表達(dá)式"(a b)*(c-d)",我們希望能夠通過程序來驗(yàn)證其中的括號(hào)是否匹配正確。本文將介紹使用JavaScript實(shí)現(xiàn)括號(hào)合法性判斷的方法。
一、棧的應(yīng)用
棧是一種后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),非常適合用來解決括號(hào)匹配的問題。我們可以遍歷表達(dá)式中的每一個(gè)字符,當(dāng)遇到左括號(hào)時(shí),將其壓入棧中;當(dāng)遇到右括號(hào)時(shí),判斷棧頂?shù)淖址欠駷橄鄳?yīng)的左括號(hào),如果是,則將棧頂?shù)淖址鰲?,繼續(xù)遍歷下一個(gè)字符;如果不是,則說明括號(hào)不匹配,返回false。
以下是使用棧實(shí)現(xiàn)括號(hào)匹配的代碼示例:
```javascript
function isParenthesesValid(expression) {
let stack [];
for (let i 0; i < expression.length; i ) {
if (expression[i] '(' || expression[i] '[' || expression[i] '{') {
stack.push(expression[i]);
} else if (expression[i] ')' || expression[i] ']' || expression[i] '}') {
if (stack.length 0) {
return false;
}
let top stack.pop();
if ((expression[i] ')' top ! '(') || (expression[i] ']' top ! '[') || (expression[i] '}' top ! '{')) {
return false;
}
}
}
return stack.length 0;
}
let expression "(a b)*(c-d)";
console.log(isParenthesesValid(expression));
```
二、遍歷字符串的實(shí)現(xiàn)
除了使用棧,我們還可以使用遍歷字符串的方式來判斷括號(hào)是否合法。思路是創(chuàng)建一個(gè)計(jì)數(shù)器,遍歷表達(dá)式中的每一個(gè)字符,當(dāng)遇到左括號(hào)時(shí),計(jì)數(shù)器加一;當(dāng)遇到右括號(hào)時(shí),計(jì)數(shù)器減一。如果在遍歷過程中計(jì)數(shù)器小于零,或者最終計(jì)數(shù)器不等于零,則說明括號(hào)不匹配,返回false。
以下是使用遍歷字符串實(shí)現(xiàn)括號(hào)匹配的代碼示例:
```javascript
function isParenthesesValid(expression) {
let count 0;
for (let i 0; i < expression.length; i ) {
if (expression[i] '(') {
count ;
} else if (expression[i] ')') {
count--;
if (count < 0) {
return false;
}
}
}
return count 0;
}
let expression "(a b)*(c-d)";
console.log(isParenthesesValid(expression));
```
綜上所述,本文介紹了使用JavaScript判斷括號(hào)是否合法的兩種方法:棧的應(yīng)用和遍歷字符串。讀者可以根據(jù)自己的實(shí)際需求選擇合適的方法來解決括號(hào)匹配問題。