스 택 과 HashMap 을 이용 하여 괄호 일치 문 제 를 처리 합 니 다.
'(', ')', '{', '}', '[', ']' 만 포함 하 는 문자열 을 지정 하여 문자열 이 올 바른 지 판단 합 니 다.
유효한 문자열 만족:
왼쪽 괄호 는 같은 유형의 오른쪽 괄호 로 닫 아야 합 니 다.왼쪽 괄호 는 반드시 정확 한 순서 로 닫 아야 한다.빈 문자열 은 유효한 문자열 로 여 겨 질 수 있 습 니 다.
알고리즘:
1. 스 택 2 를 초기 화하 고 표현 식 의 모든 기호 3 을 순서대로 처리 합 니 다. 오른쪽 괄호 를 만나면 스 택 꼭대기 요 소 를 검사 합 니 다. 스 택 꼭대기 요소 가 같은 유형의 왼쪽 괄호 라면 스 택 꼭대기 요 소 를 꺼 냅 니 다. 그렇지 않 으 면 표현 식 이 잘못 되 었 음 을 의미 합 니 다.4. 왼쪽 괄호 를 만나면 스 택 에 5. 모든 기호 처리 가 끝 난 후에 스 택 에 요소 가 있 으 면 표현 식 이 잘못 되 었 음 을 의미 합 니 다.
대응 하 는 코드: 1,
Stack stack = new Stack();
2、
for( int i = 0; i < s.length(); i++) //(String s)
char c = s.charAt(i);
3、
if(this.mappings.containsKey(c))
{
if(stack.isEmpty() || stack.peek() != this.mappings.get(c)); // —— key value
return false;
else
stack.pop();
}
또 다른 효율 적 인 방법: 표현 식 이 유효 하 다 면 오른쪽 괄호 를 만 났 을 때 스 택 꼭대기 요 소 는 반드시 대응 하 는 왼쪽 괄호 여야 합 니 다.그렇지 않 으 면 표현 식 이 잘못 되 었 습 니 다.따라서 창고 꼭대기 요 소 는 취하 지 않 으 면 무효 입 니 다.따라서 스 택 꼭대기 요 소 를 먼저 꺼 낼 수 있 습 니 다. 꺼 낸 스 택 꼭대기 요소 가 오른쪽 괄호 와 일치 하지 않 으 면 false 로 돌아 가면 됩 니 다.
char topElement = stack.empty()? '#' : stack.pop();
if (topElement != this.mappings.get(c))
return false;
4、
else stack.push(c);
5、
return stack.isEmpty
다른: 구조 함수 에서 HashMap 초기 화
private HashMap mappings;
// Initialize hash map with mappings. This simply makes the code easier to read.
public Solution() {
this.mappings = new HashMap();
this.mappings.put(')', '(');
this.mappings.put('}', '{');
this.mappings.put(']', '[');
}
메모:
Stack 의 API
boolean empty() E peek() E pop() E push(E object) int search(Object o)
HashMap API
void clear() Object clone() boolean containsKey(Object key) boolean containsValue(Object value) Set> entrySet() V get(Object key) boolean isEmpty() Set keySet() V put(K key, V value) void putAll(Map extends K, ? extends V> map) V remove(Object key) int size() Collection values()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.