스택 균형 괄호 문자열 python-는 / 문자열이 반전 여부 확인

스택 (스택)를 사용하는 컴퓨터에 널리 필드 컬렉션에 스택 선형 모음 액세스 엄격히주기에 한정되는 상부 (위)했다. 예를 들어, 추가 할 때 플레이트를 채울 때, 당신은 대부분의 판의 스택의 상단에있는, 새로운 판을 할 때마다 깨끗한 요리의 더미를 쌓아 싶어, 상기 상단에 있습니다 접시의 바닥에, 당신은 사용하지 않을 수 있습니다. 스택의 가장 일반적인 작업, 거기에 다음과 같은 두 가지 :
#은 압입 (A) 푸시 스택의 언론 피팅
팝 () # 팝, 스택 팝의 마지막 요소

스택 확인 괄호 문자열의 균형 여부

알고리즘 생각 :
(문자열로 표현) 1. 순차 주사 연산 식 스택에 브래킷 시간 3 종류 직면 왼쪽};
2. 때 오른쪽 괄호의 특정 유형에 주사 전류 비교 경기를 계속하기로 결정하는 경우 상위 요소의 일치 여부, 드를 스택 형,
3.를 스택의 현재 상단이 현재 스캔 브래킷, 잘못된 페어링의 순서에 괄호 일치하지 않는 경우, 경기는 종료, 실패
4. 문자열이있는 경우 현재 어떤 종류의 스택되는 오른쪽 괄호 출구 오른쪽 괄호 괄호를 왼쪽보다 경기가 실패, 비어;
5. 문자열 검색 사이클이 종료 될 때 스택하지 (즉, 왼쪽 스택의 특정 종류가 빈 괄호), 다음 왼쪽 괄호 오른쪽 괄호보다 경기가 실패
6 올바르게 브래킷의 정상 종료와 일치합니다.

class Stack(object):
    def __init__(self, limit=10):
        self.stack = [] #存放元素
        self.limit = limit #栈容量极限
    def push(self, data): #判断栈是否溢出
        if len(self.stack) >= self.limit:
            print('StackOverflowError')
            pass
        self.stack.append(data) #没有溢出将data放入self.stack
    def pop(self):
        if self.stack: 
            return self.stack.pop()
        else:
            raise IndexError('pop from an empty stack') #空栈不能被弹出
    def peek(self): #查看堆栈的最上面的元素
        if self.stack:
            return self.stack[-1]
    def is_empty(self): #判断栈是否为空
        return not bool(self.stack)
    def size(self): #返回栈的大小
        return len(self.stack)
def balanced_parentheses(parentheses):
    stack = Stack(len(parentheses))
    for parenthesis in parentheses: #字符串的每个元素
        if parenthesis == '(':    #如果是左括号,压栈
            stack.push(parenthesis)
        elif parenthesis == ')': 如果是右括号,判断栈是不是空,为空则不匹配,返回False
            if stack.is_empty():
                return False
            stack.pop() #不为空,则左右匹配,将之前压栈的左括号弹出,进行下一个字符的匹配
    return stack.is_empty() 返回布尔类型
if __name__ == '__main__':
    examples = ['((()))', '((())', '(()))']
    print('Balanced parentheses demonstration:\n')
    for example in examples:
        print(example + ': ' + str(balanced_parentheses(example)))

결과 :
균형 잡힌 괄호 데모 :

((())) : 참
((()) : 거짓
(())) : 거짓

간단하게 말해서, 왼쪽 브래킷이 충족 된 다음 스택, 오른쪽 괄호 충족 :
1)가 오른쪽에서 왼쪽, 불균형이 거짓 첫번째 반환 후이 표시되지 않는 스택 내에서 요소가 있는지 여부를 확인하기 위해
2) 다음 결정 최상위 요소 여부 일치하지 않을 경우 현재의 오른쪽 괄호의 일치, 다음주기를 계속 거짓, 일치하는 경우, 상위 요소를 삭제 반환
스택 내에서 요소가 있는지 여부를 확인하기 위해주기의 종료 후, 마지막으로, 불균형 왼쪽 괄호 오른쪽 괄호의 수보다 더가 있음을 나타냅니다 일치하지 않습니다. 균형에 대한 어떤 설명과는 True를 반환하지 않습니다.

문자열을 반전하려면 :

def str_reverse(str):
    s = Stack()
    result = ''
    for i in str:
        s.push(i)
    while not s.is_empty():
        result += s.pop()
    return result 

추천

출처blog.csdn.net/xavier_muse/article/details/90647541