写一个函数用来统计字符串中各字母出现的次数。(编程语言不限) 示例: 输入:X2Y3XZ,输出:X3Y3Z1; 输入:Z3X(XY)2,输出:X3Y2Z3; 输入:Z4(Y2(XZ2)3)2X2,输出:X8Y4Z16
时间: 2024-03-22 22:37:51 浏览: 352
好的,以下是 Python 代码实现:
```python
def count_letters(s):
"""
统计字符串中每个字母出现的次数,支持括号嵌套,数字表示重复次数
"""
stack = [{}]
i = 0
while i < len(s):
c = s[i]
if c.isalpha():
stack[-1][c] = stack[-1].get(c, 0) + 1
i += 1
elif c.isdigit():
j = i + 1
while j < len(s) and s[j].isdigit():
j += 1
n = int(s[i:j])
i = j
d = stack[-1]
for k, v in d.items():
d[k] = v * n
elif c == '(':
stack.append({})
i += 1
elif c == ')':
d = stack.pop()
for k, v in d.items():
stack[-1][k] = stack[-1].get(k, 0) + v
i += 1
return stack[0]
```
函数 `count_letters` 接受一个字符串 `s`,通过栈来处理括号嵌套的情况,同时支持数字表示重复次数。首先将空字典压入栈中,表示当前层的统计结果。然后遍历每个字符,如果是字母就在当前层的字典中更新对应的计数器,如果是数字就将其转换为整数 n,并将当前层的字典中所有计数器乘以 n。如果遇到左括号就压入一个新的空字典,表示进入下一层统计;如果遇到右括号就弹出栈顶的字典,并将其中的计数器合并到当前层的字典中。最后返回栈底的字典,即为最终的统计结果。
例如,输入字符串 `"X2Y3XZ"`,函数的输出为 `{'X': 3, 'Y': 3, 'Z': 1}`,表示字符 `X` 出现了 3 次,字符 `Y` 出现了 3 次,字符 `Z` 出现了 1 次。再例如,输入字符串 `"Z4(Y2(XZ2)3)2X2"`,函数的输出为 `{'Z': 16, 'X': 8, 'Y': 4}`,表示字符 `Z` 出现了 16 次,字符 `X` 出现了 8 次,字符 `Y` 出现了 4 次。
阅读全文