Java实现统计字符串中各字母出现的次数(含有括号)。
题目 写一个函数用来统计字符串中各字母出现的次数。
示例:
输入:X2Y3XZ,输出:X3Y3Z1;
输入:Z3X(XY)2,输出:X3Y2Z3;
输入:Z4(Y2(XZ2)3)2X2,输出:X8Y4Z16;
package com.interview.javabasic.exam;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String input = in.nextLine();
String output = countChars(input);
System.out.println(output);
}
public static String countChars(String input) {
HashMap<Character, Integer> charCount = new HashMap<>();
countCharsHelper(input, 1, charCount);
String output = "";
for (Map.Entry<Character, Integer> entry : charCount.entrySet()) {
output += entry.getKey() + entry.getValue().toString();
}
return output;
}
private static void countCharsHelper(String input, int count, HashMap<Character, Integer> charCount) {
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c == '(') {
int endIndex = findMatchingParenthesis(input, i);
int num = getNumberAfterParenthesis(input, endIndex + 1);
countCharsHelper(input.substring(i + 1, endIndex), count * num, charCount);
i = endIndex + Integer.toString(num).length();
} else if (Character.isLetter(c)) {
int num = getNumberAfterParenthesis(input, i + 1);
charCount.put(c, charCount.getOrDefault(c, 0) + count * num);
}
}
}
private static int findMatchingParenthesis(String input, int startIndex) {
int count = 1;
for (int i = startIndex + 1; i < input.length(); i++) {
char c = input.charAt(i);
if (c == '(') {
count++;
} else if (c == ')') {
count--;
if (count == 0) {
return i;
}
}
}
return -1;
}
private static int getNumberAfterParenthesis(String input, int startIndex) {
//数字可能不止个位
int endIndex = startIndex;
while (endIndex < input.length() && Character.isDigit(input.charAt(endIndex))) {
endIndex++;
}
//可能只有是1
return endIndex == startIndex ? 1 : Integer.parseInt(input.substring(startIndex, endIndex));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix