단지 주어진 포함 '('
, ')'
, '{'
, '}'
, '['
, ']'
문자열, 그것은 문자열이 유효한지 여부를 결정합니다.
바로 문자를 포함하는 문자열을 감안할 때 '('
, ')'
, '{'
, '}'
,를 '['
하고 ']'
, 입력 문자열이 유효한 경우 결정합니다.
유효한 문자열을 충족해야합니다 :
- 왼쪽 브래킷은 동일한 유형의 닫는 괄호에 의해 폐쇄해야합니다.
- 왼쪽 괄호가 올바른 순서로 닫아야합니다.
입력 문자열은 유효하다 :
- 오픈 브라켓은 브라켓의 동일한 유형에 의해 폐쇄해야합니다.
- 열기 괄호가 올바른 순서로 닫아야합니다.
빈 문자열을 참고 유효한 문자열로 간주 될 수있다.
빈 문자열도 유효한 것으로 간주되고 있습니다.
예 1 :
输入: "()"
输出: true
예 2 :
输入: "()[]{}"
输出: true
예 3 :
输入: "(]"
输出: false
예 4 :
输入: "([)]"
输出: false
예 5 :
输入: "{[]}"
输出: true
문제 해결 아이디어 :
아주 간단한 질문, 스택에 각 문자열은, 간단하게 판단 할 수있다. 예를 들면 :
输入: "{[]}"
初始栈为空,'{' 入栈
下一个字符
栈顶元素 '{'与 '[' 不匹配,'[' 入栈
下一个字符
栈顶元素 '['与 ']' 匹配,'[' 出栈
下一个字符
栈顶元素 '{'与 '}' 匹配,'}' 出栈
结束,栈为空,返回 True
키가 문자인지 여부를 결정, 일치하는 기준은 반대 중괄호 문자는 같은 문자가 아니다. 스위치는 세 괄호 문자의 종류, 또는 if 문 세를 확인하는 데 사용할 수 있습니다, 다음, 또는 당신은 해시 테이블 매핑 브래킷 관계를 사용할 수 있습니다.
자바:
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();//初始化栈
for (char b : s.toCharArray()) {
switch (b) {
case '(': {
stack.push(')');
break;
}
case '{': {
stack.push('}');
break;
}
case '[': {
stack.push(']');
break;
}
default: {//不匹配的情况返回false
if (stack.isEmpty() || stack.pop() != b) {
return false;
}
}
}
}
return stack.isEmpty();//栈为空则证明全部匹配,返回true,否则返回false
}
}
파이썬 :
참고 : 파이썬이 전환되지 않습니다 ... 경우 ... 문을 공식에 의해 판사 그래서 대신의 경우 ...
class Solution:
def isValid(self, s: str) -> bool:
stack = []
for c in s:
if c == '[':
stack.append(']')
elif c == '(':
stack.append(')')
elif c == '{':
stack.append('}')
elif len(stack) == 0 or stack.pop() != c:
return False
return len(stack) == 0
마이크로 채널 대중 숫자에 오신 것을 환영합니다주의 : 사랑 버그 쓰기