用java写一个函数用来统计字符串中各字母出现的次数。 示例: 输入:X2Y3XZ,输出:X3Y3Z1; 输入:Z3X(XY)2,输出:X3Y2Z3; 输入:Z4(Y2(XZ2)3)2X2,输出:X8Y4Z16;
时间: 2024-02-17 18:03:53 浏览: 55
好的,我可以帮你写出这样的一个函数。可以参考下面的代码实现:
```java
public static String countLetters(String str) {
Map<Character, Integer> map = new HashMap<>();
Stack<Integer> nums = new Stack<>();
Stack<Character> chars = new Stack<>();
int num = 0;
for (char c : str.toCharArray()) {
if (Character.isLetter(c)) {
if (num == 0) {
map.put(c, map.getOrDefault(c, 0) + 1);
} else {
num *= nums.peek();
map.put(chars.pop(), map.getOrDefault(chars.pop(), 0) + num);
num = 0;
}
} else if (Character.isDigit(c)) {
num = num * 10 + c - '0';
} else if (c == '(') {
nums.push(num);
num = 0;
} else if (c == ')') {
num *= nums.pop();
map.put(chars.pop(), map.getOrDefault(chars.pop(), 0) + num);
num = 0;
} else {
continue;
}
}
StringBuilder sb = new StringBuilder();
for (char c : map.keySet()) {
sb.append(c);
sb.append(map.get(c));
}
return sb.toString();
}
```
这个函数的实现思路是使用两个栈,一个栈用来存储数字,一个栈用来存储字母。遍历字符串时,如果遇到字母,将其出现次数加入到 map 中;如果遇到数字,将其累加到 num 中;如果遇到左括号,将 num 入栈;如果遇到右括号,将 num 乘以栈顶数字,并将栈顶字母出栈,将累加后的结果加入到 map 中。最后遍历 map,将字母和出现次数拼接成字符串返回即可。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)