華為20190410研究開発筆記試験第二題:文字列展開
【タイトル説明】
文字列を指定します.文字列には、数値、大文字と小文字、カッコ(カッコ、中カッコ、カッコを含む)を含めることができます.かっこはネストできます.すなわち、カッコに数字とかっこが表示されます.以下のルールに従って文字列を展開し、カッコのペアが一致しない問題を考慮せず、例を用いてカッコの一致を保証するとともに、各数字の後ろにカッコがあることを保証し、数字の後ろにカッコがない場合を考慮しない:すなわち2 a 2(b).数字は括弧内の文字列が繰り返される回数を表し、展開された文字列は括弧を含まない. 文字列を逆順序で展開します.
最終文字列の出力
【入力説明】100未満の長さの文字列を入力します.
【出力説明】展開した文字列を出力します.
【試験例】【入力】abc 3(A)【出力】AAAcba
【解題の考え方】スタックの思想を採用する.
文字列を指定します.文字列には、数値、大文字と小文字、カッコ(カッコ、中カッコ、カッコを含む)を含めることができます.かっこはネストできます.すなわち、カッコに数字とかっこが表示されます.以下のルールに従って文字列を展開し、カッコのペアが一致しない問題を考慮せず、例を用いてカッコの一致を保証するとともに、各数字の後ろにカッコがあることを保証し、数字の後ろにカッコがない場合を考慮しない:すなわち2 a 2(b).
最終文字列の出力
【入力説明】100未満の長さの文字列を入力します.
【出力説明】展開した文字列を出力します.
【試験例】【入力】abc 3(A)【出力】AAAcba
【解題の考え方】スタックの思想を採用する.
def printString(strings):
stack = []
for s in strings:
if s.isalpha():
stack.append(s)
elif s.isdigit():
stack.append(s)
elif s == '{' or s == '[' or s == '(':
stack.append(s)
else: # ,
temp = []
#
while stack[-1] != '{' and stack[-1] != '[' and stack[-1] != '(':
temp.insert(0, stack.pop(-1))
#
stack.pop(-1)
# , :
num = []
count = 0
while stack[-1].isdigit():
num.insert(0, stack.pop(-1))
#
for i in range(len(num)):
count = count * 10 + int(num[i])
#
temp = temp * count
#
for t in temp:
stack.append(t)
#
while stack:
print(stack.pop(-1), end='')
print('')
if __name__ == '__main__':
strings = 'abc2[A3(B)]'
printString(strings)