華為20190410研究開発筆記試験第二題:文字列展開


【タイトル説明】
文字列を指定します.文字列には、数値、大文字と小文字、カッコ(カッコ、中カッコ、カッコを含む)を含めることができます.かっこはネストできます.すなわち、カッコに数字とかっこが表示されます.以下のルールに従って文字列を展開し、カッコのペアが一致しない問題を考慮せず、例を用いてカッコの一致を保証するとともに、各数字の後ろにカッコがあることを保証し、数字の後ろにカッコがない場合を考慮しない:すなわち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)