用于反转字符串中单词的程序[关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于反转字符串中单词的程序[关闭]相关的知识,希望对你有一定的参考价值。
我编写了一个程序来反转字符串中的单词。如果i / p是“狗正在追逐”那么o / p应该是“追逐是狗”
public class String_reverse {
public static void main(String[] args) {
String input= "The dog is chasing";
String[] arr= input.split(" ");
String reverse="";
for(int i=arr.length-1;i>=0;i--)
{
reverse+= ((reverse.equals(""))?"":" ")+arr[i];
}
System.out.println(reverse);
}
}
但我不知道如何使用递归编写这个程序。当我尝试在stackoverflow中搜索时,我可以找到反转字符串;但不能反转字符串中的单词。
答案
Recursive methods在开始时看起来有点困难但是尝试做以下事情:
- 尽可能简化问题,找到自己解决的不太复杂的案例。 (例如,您可以使用带有两个单词的句子)。
- 首先在纸上做,使用Pseudocode帮助您用最简单的语言处理问题。
- 开始编码,不要忘记逃避你的递归。
解
public static void main(String[] args) {
String s = reverseSentence("This sentence will be reversed - I swear".split(" "));
System.out.println(s);
}
public static String reverseSentence(String[] sentence){
if (sentence.length <= 1){
return sentence[0];
}
String[] newArray = new String[sentence.length-1];
for (int i = 0 ; i < newArray.length ; i++){
newArray[i] = sentence[i];
}
return sentence[sentence.length-1] + " " + reverseSentence(newArray);
}
另一答案
递归方法,使用与linked "duplicate"相同的逻辑,不使用split()
:
private static String reverseWords(String text) {
int idx = text.indexOf(' ');
return (idx == -1 ? text : reverseWords(text.substring(idx + 1)) + ' ' + text.substring(0, idx));
}
逻辑是:
- 拿第一个字母/单词
- 如果那是最后一个字符/单词,则返回它
- 使用剩余文本执行递归调用(不包括单词分隔空间)。
- 追加空间(如果做的话)
- 附加第1步中的第一个字符/单词
- 返回结果
如您所见,当应用于反转文本(字符)而不是单词时,它非常相似:
private static String reverseText(String text) {
return (text.length() <= 1 ? text : reverseText(text.substring(1)) + text.charAt(0));
}
对于那些喜欢拼写的东西并且不喜欢三元运算符的人来说,这里是长版本,有额外的括号并支持空值:
private static String reverseWords(String text) {
if (text == null) {
return null;
}
int idx = text.indexOf(' ');
if (idx == -1) {
return text;
}
return reverseWords(text.substring(idx + 1)) + ' ' + text.substring(0, idx);
}
private static String reverseText(String text) {
if (text == null || text.length() <= 1) {
return text;
}
return reverseText(text.substring(1)) + text.charAt(0);
}
请注意reverseText()
的长版本与链接副本中的版本完全相同。
另一答案
这是一个示例程序,它将以递归方式执行您想要的操作:
public class ReverseWords {
public static void main(String args[]) {
String s = "This is a test";
reverse(s);
}
private static void reverse(String s) {
if(s == null) return;
String words[] = s.split(" ", 2);
if (words.length < 2) reverse(null);
else reverse(words[1]);
System.out.print(words[0] + " ");
}
}
另一答案
您可以参考以下代码。
class ReverseString {
public static void main(String args[]) {
String myString = "The dog is chasing";
reverse(myString);
}
public static String reverse(String myString) {
int space = myString.indexOf(" ");
if (space != -1) {
reverse(myString.substring(space + 1, myString.length()));
}
if (space == -1) {
System.out.println(myString.substring(0, myString.length()));
} else {
System.out.println(myString.substring(0, space));
}
return myString;
}
}
以上是关于用于反转字符串中单词的程序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
2022&2023华为OD机试 - 单词反转 2(Python)
华为OD机试真题Java实现单词反转真题+解题思路+代码(2022&2023)