LeetCode 20. 유효한 괄호 JS

6653 단어 LeetCode
설명: '(', ')', '{', '}', '[', ']' 만 포함 하 는 문자열 을 지정 하여 문자열 이 올 바른 지 판단 합 니 다.
유효한 문자열 은 만족 해 야 합 니 다. 왼쪽 괄호 는 같은 유형의 오른쪽 괄호 로 닫 아야 합 니 다.왼쪽 괄호 는 반드시 정확 한 순서 로 닫 아야 한다.빈 문자열 은 유효한 문자열 로 여 겨 질 수 있 습 니 다.
예시 1:
  : "()"
  : true

예시 2:
  : "()[]{}"
  : true

예시 3:
  : "(]"
  : false

방법: 알고리즘
(1) 스 택 S 를 초기 화 합 니 다.(2) 표현 식 의 괄호 를 한 번 에 처리 합 니 다.(3) 괄호 를 열 면 우 리 는 그것 을 창고 에 밀어 넣 기만 하면 된다.이것 은 우리 가 잠시 후에 그것 을 처리 할 것 임 을 의미 하 며, 우 리 는 간단하게 앞의 하위 표현 식 으로 돌아 갈 것 이다.(4) 만약 에 우리 가 괄호 를 닫 는 것 을 만나면 우 리 는 창고 꼭대기 의 요 소 를 검사 합 니 다.스 택 꼭대기 의 요소 가 같은 유형의 왼쪽 괄호 라면 스 택 에서 꺼 내 서 계속 처리 합 니 다.그렇지 않 으 면 표현 식 이 잘못 되 었 음 을 의미 합 니 다.(5) 마지막 까지 남 은 스 택 에 요소 가 있다 면 표현 식 이 잘못 되 었 음 을 의미 합 니 다.
/**
 * @param {string} 
 * @return {boolean}
 */
var isValid = function (s) {
  let len = s.length;
  let first = s[0];
  if (len === 0) return true;
  //              
  if (len % 2 != 0 || [')', ']', '}'].indexOf(first) != -1) {
    return false
  }
  //  ,       。
  let stack = [first];
  const MAP = {
    ')': '(',
    ']': '[',
    '}': '{',
  }
  for (let i = 1; i < len; i++) {
    let length = stack.length;
    let top = length > 0 ? stack[length - 1] : null;
    let now = s[i];
    if (MAP[now] === top) {
      stack.pop();
    } else {
      stack.push(now);
    }
  }
  return stack.length === 0
};

좋은 웹페이지 즐겨찾기