使用s的Python字符数学

2021-09-27 06:58:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一次算法会议上收到了一个有趣的挑战。给定一个输入字符串,返回一个字符串,其中括号内的所有子字符串已被复制n次,其中n是括号外的整数。括号外的字符应该简单地连接到括号内的子字符串。例如:

  • 2[ab]应该返回abab
  • a[3[bc]]应该返回abcbc
  • 2[ab[cd]]应该返回

我已经开始使用堆栈来实现这个解决方案,但是我感觉我检查每个取消堆叠的字符是否有括号的方法是错误的,有人有什么建议吗?代码如下

class Stack:
    def __init__(self):
        self.items = []

    def push(self, item):
        self.items.append(item)

    def pop(self):
        return self.items.pop()

    def length(self):
        return len(self.items)

def is_number(s):
    try:
        int(s)
        return True
    except ValueError:
        return False

def character_math(charstr):
    final_output = ""
    substring = ""
    for i in charstr:
        myStack.push(i)

    for m in range(myStack.length() - 2):
        destacked = myStack.pop()
        # We want to go to the inner-most right bracket
        if destacked != "]":
            substring += destacked
        if destacked == "[":
            possible_multiplier = myStack.pop()
            if is_number(possible_multiplier):
                final_output += int(possible_multiplier) * substring
            else:
                final_output += possible_multiplier[::-1]
                break
        final_output += substring[::-1]
    return "Final output is ", final_output

myStack = Stack()
# 3[ab[cd]] should return 'abcdabcd'
sample_str = '2[ab[cd]]'
print(character_math(sample_str))