-2
我在算法Meetup中收到了一個有趣的挑戰。給定一個輸入字符串,返回一個字符串,其中括號內的所有子字符串都被複制了n次,其中n是括號外的整數。括號內的字符應該簡單地連接到裏面的子字符串。例如:Python人物數學使用堆棧
- 2 [AB]應返回ABAB
- [3 [BC]]應返回abcbcbc
- 2 [AB苯並[cd]]應返回abcdabcd
我已經明星ted使用堆棧實現解決方案,但是我已經感覺到,我檢查每個拆分字符的方法是關閉的,任何人有任何建議?代碼低於
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))
這是真的,也許我可以更具體一些。我正在努力確定評估一系列字符的正確模式,因爲我現在的方法對於處理不同的輸入字符串來說太麻煩了。感謝Mathieu通過指向遞歸來做到這一點。 – jmdeamer