JS簡單實現括號匹配問題
阿新 • • 發佈:2019-01-09
http://blog.csdn.net/u012989536/article/details/51931848
演算法簡述
t/u012989536/article/details/51931848
演算法簡述
a:遍歷輸入測試的字串,模板括號字元加入陣列(用於最後進行比較判斷);
b:遍歷字串陣列,先進行判斷長度為空,在進行判斷是否為奇偶數,如果是偶數,就進行下一步,比較演算法為:遍歷字串陣列,如果是右括號,就讓它和前面一位的字元進行匹配,匹配成功就移除掉兩個元素,然後從頭遍歷。匹配不成功就接著往下迴圈。如果到最後陣列的元素長度為空,那麼完全匹配,如果還有元素,就說明匹配不成功
示例程式碼
[javascript] view plain copy-
var moduleJson = {//括號匹配模板,你可以增加別的匹配,比如“{}”,“<>”,等,只需寫入moduleJson裡面去
- ")":"(",
- "]":"["
- }
- var testStr = "([()]())()()";//測試字串
- var tempSaveArray = [];//用於儲存字串的陣列
- for(var i = 0;i<testStr.length;i++){//如果存在括號字元,就加入陣列
- for(var key in moduleJson){
- if(testStr[i] == key||testStr[i]==moduleJson[key]){//如果字串中存在json中的key 和value字元,就加入陣列
-
tempSaveArray.push(testStr[i]);
- }
- }
- }
- if(tempSaveArray.length){
- if((tempSaveArray.length%2)!=0){//如果括號的長度為奇數,肯定不匹配
- console.log("括號不匹配");
- }else{//如果字串括號長度為偶數,就進行遍歷陣列,進行判斷 12345 0 4
- for(var j = 0;j<tempSaveArray.length;j++){
- //(((())))
-
if(moduleJson[tempSaveArray[j]]){
- //拿到陣列前一位的字元,是否與自己匹配
- if(j>0){
- console.log("前一個元素:"+j+tempSaveArray[j-1]+" 後一個元素"+moduleJson[tempSaveArray[j]]);
- console.log(moduleJson[tempSaveArray[j]]==tempSaveArray[j-1]);
- if(moduleJson[tempSaveArray[j]]==tempSaveArray[j-1]){//說明兩個括號進行了匹配,讓其出棧
- tempSaveArray.splice(j-1,2);
- j=0;//從新遍歷陣列
- }
- }
- }
- }
- if(tempSaveArray.length){//沒有移除完畢
- console.log("括號不匹配");
- } else{
- console.log("括號匹配,恭喜你語法正確!");
- }
- }
- }else{
- console.log("你輸入的字串不存在括號");
- }
t/u012989536/article/details/51931848