【发布时间】:2021-07-27 05:47:02
【问题描述】:
如何使用递归来反转句子中的单词,而不是标点符号。据说该句子使用标点符号:,.?!
输入:“杰克,回家吧!”
输出:“回家,杰克来了!”
现在我以某种方式设法正确完成了任务,但没有使用递归。 我应该如何将这项工作转换为使用递归来解决问题?
方法如下:
public static StringBuilder reverseSentenceWithPunctuation(String sentence, int i) {
String[] parts = sentence.split(" ");
StringBuilder newSentence = new StringBuilder();
Map<Integer, Character> punctuationMap = new HashMap<>();
for (int j = 0; j < parts.length; j++) {
if (parts[j].endsWith(",") || parts[j].endsWith(".") || parts[j].endsWith("!") || parts[j].endsWith("?")) {
char lastSymbol = parts[j].charAt(parts[j].length()-1);
punctuationMap.put(j, lastSymbol);
String changedWord = parts[j].replace(String.valueOf(lastSymbol), "");
parts[j] = changedWord;
}
}
for (int j = parts.length-1; j >= 0; j--) {
newSentence.append(parts[j]);
if (punctuationMap.containsKey(i)) {
newSentence.append(punctuationMap.get(i));
newSentence.append(" ");
} else
newSentence.append(" ");
i++;
}
return newSentence;
}
提前致谢!
【问题讨论】:
-
idk 为什么你应该这样做,但你几乎可以在递归中转换一个 for 循环,创建一个带有“你需要的参数 + 索引”的函数(从循环的起始值开始,在您的情况下 0 和
parts.length-1) 然后将类似if(condition of the loop) return;的内容作为第一行然后放入循环体,然后在底部调用函数本身,并根据您的第三条指令增加或减少索引 for循环
标签: java string recursion reverse