我试着取一个给定的字符串,当括号前有一个数字时,括号内的内容就会重复这个次数。我考虑过使用stringbuilder并构建这个函数,但我不知道如何重复括号的内部。示例-3(ab)-result将是ababab,示例-3(b(2(c)))result将是bcc在我在这里构建的函数中它重复括号而不是括号的内容。
public static String solve(String s){
StringBuilder sb = new StringBuilder();
int repeat = 0;
for (char c : s.toCharArray()) {
if (Character.isDigit(c)) {
repeat = repeat * 10 + Character.getNumericValue(c);
} else {
while (repeat > 0) {
sb.append(c);
repeat--;
}
sb.append(c);
}
}
return sb.toString();
}
}
3条答案
按热度按时间rxztt3cl1#
与@serialazers的答案基本相同,但在java中,需要一些调试输出来查看代码的行为:
输出:
退货:
vsaztqbk2#
这个问题自然是递归的。保留您已经开始的方法,您可以编写如下内容。在实际代码中,我可能倾向于一种将标记化和解析分离的方法,这意味着我将执行两个单独的过程:第一个过程将输入字符串转换为标记,第二个过程从标记流生成输出。
将此代码转换为使用单个
StringBuilder
-为了避免多余的字符串副本-作为练习。上面使用了一个简单的
Pair
助手类。由于java没有附带一个(groan),这里有一个非常简单的实现,可以与上面的代码一起使用;您也可以使用javafx的javafx.util.Pair
或者java.util.AbstractMap.SimpleEntry
或者别的什么。mctunoxg3#
您需要一个堆栈来维护从最内部到最外部容器所需操作的某种内存。
下面是python中的代码:
输出: