3.字符串解密
任务描述
给定一个经过加密的字符串,返回它解密后的字符串。
解密规则为:n(string)。表示其中圆括号内部的string正好重复n此。n为正整数。如2(bc),解密之后的结果为bcbc
注意:
string的长度 ≥ \ge ≥ 1
n ≥ 1 n\ge1 n≥1
不会以数字单独结尾
提示:可以参考数据结构Stack进行实现
输入格式:
输入的格式为n(string),其中n为正整数,string为任意由字母表示的字符串。
1.
输入:
3(a)2(bc)
输出:
aaabcbc
2.
输入:
3(a2(c))
输出:
accaccacc
具体实现
-
从左到右遍历字符串string,查找其中左右括号的位置
-
将最靠右的左括号的索引记录为
left_i
,将第一个出现也就是最靠左的右括号的索引记录为right_i
-
left_i-1
即为数字的索引,切片string[left_i+1:right_i]
即为要重复的字符串 -
将
n(string)
替换掉
substring=string[left_i+1:right_i]*num
strin=string[:left_i-1]+substring+string[right_i+1:]
string=strin
- 重复上述操作,直到字符串中不含括号
s = input()
#********** Begin **********#
def decode(string):
while '(' in string:
left_i=0
right_i=0
for v in range(len(string)):
if string[v]=='(' or string[v]==')':
if string[v]=='(':
left_i=v
if string[v]==')':
right_i=v
break
num=int(string[left_i-1])
substring=string[left_i+1:right_i]*num
strin=string[:left_i-1]+substring+string[right_i+1:]
string=strin
return string
print(decode(s))
问题分析
- 当数字是两位数以上时,这种方法将不再可行
- 还没弄明白怎么用Stark(栈)数据结构去实现函数功能