写一个函数用来统计字符串中各字母出现的次数,示例: 输入:X2Y3XZ,输出:X3Y3Z1; 输入:Z3X(XY)2,输出:X3Y2Z3; 输入:Z4(Y2(XZ2)3)2X2,输出:X8Y4Z16;
时间: 2024-05-09 07:20:31 浏览: 174
C语言编程-编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数;
5星 · 资源好评率100%
```python
def count_letters(s):
stack = []
d = {}
i = 0
while i < len(s):
if s[i].isalpha():
if s[i] not in d:
d[s[i]] = 0
d[s[i]] += 1
i += 1
elif s[i].isdigit():
num = ""
while i < len(s) and s[i].isdigit():
num += s[i]
i += 1
stack.append(int(num))
elif s[i] == "(":
stack.append(d)
d = {}
i += 1
elif s[i] == ")":
n = stack.pop()
for k in d:
if k not in n:
n[k] = 0
n[k] += d[k] * stack.pop()
d = n
i += 1
res = ""
for k in sorted(d.keys()):
res += k + str(d[k])
return res
```
思路:
用一个栈来记录括号内的字母出现次数和括号外的数字。
遍历字符串,如果当前字符是字母,则更新字典中该字母的出现次数;如果是数字,则将数字入栈;如果是左括号,则将当前字典入栈,并重置字典;如果是右括号,则弹出一个字典和一个数字,将当前字典的字母出现次数乘以数字,加到上一个字典中。
最后将字典按字母顺序排序,拼接成结果字符串返回。
阅读全文