numpy 平衡括号示例

ozxc1zmp  于 2023-10-19  发布在  其他
关注(0)|答案(3)|浏览(105)

所以我试图平衡括号的顺序。欲了解更多信息,请参阅:https://www.hackerrank.com/challenges/balanced-brackets/problem?isFullScreen=true我想使用numpy数组而不是列表。现在我面临的问题是,我不知道如何从np数组中弹出元素并将其存储在另一个列表/数组中,因为numpy中没有pop()函数。请在这里帮助我。这里是代码。也请回复我解决方案代码。

import numpy as np
t = int(input("Count: "))
while t:
    ar = np.array('')
    s = input()
    for i in s:
        if i == '(':
            np.append(['('])
        elif i == '[':
            np.append(['['])
        elif i == '{':
            np.append(['{'])
        elif i == ')':
            k = np.pop(ar)
            if k != '(':
                np.append(['k'])
                break
        elif i == ']':
            k = np.pop(ar)
            if k != '[':
                np.append(['k'])
                break
        elif i == '}':
            k = np.pop(ar)
            if k != '{':
                np.append(['k'])
                break
        
    if len(ar) == 0 or ar[len(ar)-1] != '':
        print('NO')
    else:
        print('YES')
    t-=1

我试着在数组中插入括号的字符串,但现在我不知道如何弹出它们并将其存储在另一个数组中

1yjd4xko

1yjd4xko1#

使用dictMap闭括号和开括号将使其更简单、更清晰。另外,numpy对这种情况没有帮助。一个简单的解决方案是:

def isBalanced(s):
    data = {')':'(','}':'{',']':'['}
    lst=[]

    # Loop through each character.
    for char in s:
        # if it is opening
        if char in data.values():
            lst.append(char)

        elif lst:
            # if closing doesn't pair up with opening
            if not data[char] == lst.pop():
                return "NO"

        else:
            # if unwanted character is passsed
            return "NO"

    # if all the brackets are closed in order
    return "NO" if lst else "YES"
lqfhib0f

lqfhib0f2#

这里有一个非常简单的递归方法:

def is_matched(my_string):
    right = {'(': ')', '[': ']', '{': '}'}
    if not my_string:
        return True
    if my_string[-1] == right[my_string[0]]:
        return is_matched(my_string[1:-1])
    return False
klh5stk1

klh5stk13#

你把事情弄得太复杂了你肯定不想要或需要numpy。简单的Python列表就足够了。
大概是这样的:

def isBalanced(s):
    stack = []
    left = set('({[')
    rmap = {
        ')': '(',
        '}': '{',
        ']': '['
    }
    for c in s:
        if c in left:
            stack.append(c)
        else:
            if not stack or stack.pop() != rmap.get(c):
                return 'NO'
    return 'NO' if stack else 'YES'

相关问题