我在 java 中反转给定字符串的每个单词的代码有什么问题?
What is wrong with my code of reversing each word of a given string in java?
提交后说答案错误,请告诉我其中的逻辑错误是什么,而不是格式或其他方式。
public class Solution {
public static String reverse(String s1){
int i=s1.length()-1;
String s2="";
while(i>=0){
s2=s2+s1.charAt(i--);
}
s2=s2+' ';
return s2;
}
// Return the reversed string. No need to print
public static String reverseEachWord(String s1) {
s1=s1+"";
String s2="";
int i=0;
char ch;
String temp="";
while(i<s1.length()){
ch=s1.charAt(i);
if(ch!=' '){
temp=temp+ch;
i++;
}
else{
temp=reverse(temp);
s2=s2+temp;
temp="";
i++;
}
}
return s2;
}
}
抱歉这么说,但我看到了很多问题。
首先,我建议你下次使用StringBuilder
经常操作字符串。
其次,如果 s1 是一个单词而不是像 s1 = "question" 这样的句子,在您的情况下它将存储在临时文件中并且您的 while 循环结束。 s2 仍然是空的,你得到了一个错误的答案。而且,如果s1是一个有很多词的句子,最后一个词也会出现上述同样的问题。
- 而且这一行有一个错误
temp = reverse(s2);
你的s2一开始就是空的,而且会一直这样。我想你想写 temp = reverse(temp);
顺便说一句,我没有 运行 你的代码,现在我只在你的代码中发现了这些问题。
还有很多其他方法可以做到这一点。但是如果你想改变你的代码那么这里是
public static String reverseEachWord(String s1) {
s1 = s1 + " ";
String s2 = "";
int i = 0;
char ch;
String temp = "";
while (i < s1.length()) {
ch = s1.charAt(i);
if (ch != ' ') {
temp = temp + ch;
i++;
} else {
temp = reverse(temp);
s2 = s2 + temp;
temp = "";
i++;
}
}
return s2;
}
change from temp = reverse(s2); to temp = reverse(temp);
您的 reverseWord 函数存在一些逻辑错误,请将您的函数更新为:
更改
s1 = s1 +"";
至
s1 = s1 + " ";
因为你需要连接 space.
而不是 if 你可以使用 while 循环,这可以进一步简化你的代码。
public static String reverseEachWord(String s1) {
s1 = s1 + " ";
String s2 = "";
int i = 0;
char ch;
String temp = "";
while (i < s1.length()) {
while (s1.charAt(i) != ' ') {
temp = temp + s1.charAt(i);
i++;
}
temp = reverse(temp);
s2 = s2 + temp;
temp = "";
i++;
}
return s2;
}
提交后说答案错误,请告诉我其中的逻辑错误是什么,而不是格式或其他方式。
public class Solution {
public static String reverse(String s1){
int i=s1.length()-1;
String s2="";
while(i>=0){
s2=s2+s1.charAt(i--);
}
s2=s2+' ';
return s2;
}
// Return the reversed string. No need to print
public static String reverseEachWord(String s1) {
s1=s1+"";
String s2="";
int i=0;
char ch;
String temp="";
while(i<s1.length()){
ch=s1.charAt(i);
if(ch!=' '){
temp=temp+ch;
i++;
}
else{
temp=reverse(temp);
s2=s2+temp;
temp="";
i++;
}
}
return s2;
}
}
抱歉这么说,但我看到了很多问题。
首先,我建议你下次使用StringBuilder 经常操作字符串。
其次,如果 s1 是一个单词而不是像 s1 = "question" 这样的句子,在您的情况下它将存储在临时文件中并且您的 while 循环结束。 s2 仍然是空的,你得到了一个错误的答案。而且,如果s1是一个有很多词的句子,最后一个词也会出现上述同样的问题。
- 而且这一行有一个错误
temp = reverse(s2);
你的s2一开始就是空的,而且会一直这样。我想你想写temp = reverse(temp);
顺便说一句,我没有 运行 你的代码,现在我只在你的代码中发现了这些问题。
还有很多其他方法可以做到这一点。但是如果你想改变你的代码那么这里是
public static String reverseEachWord(String s1) {
s1 = s1 + " ";
String s2 = "";
int i = 0;
char ch;
String temp = "";
while (i < s1.length()) {
ch = s1.charAt(i);
if (ch != ' ') {
temp = temp + ch;
i++;
} else {
temp = reverse(temp);
s2 = s2 + temp;
temp = "";
i++;
}
}
return s2;
}
change from temp = reverse(s2); to temp = reverse(temp);
您的 reverseWord 函数存在一些逻辑错误,请将您的函数更新为: 更改
s1 = s1 +"";
至
s1 = s1 + " ";
因为你需要连接 space.
而不是 if 你可以使用 while 循环,这可以进一步简化你的代码。
public static String reverseEachWord(String s1) {
s1 = s1 + " ";
String s2 = "";
int i = 0;
char ch;
String temp = "";
while (i < s1.length()) {
while (s1.charAt(i) != ' ') {
temp = temp + s1.charAt(i);
i++;
}
temp = reverse(temp);
s2 = s2 + temp;
temp = "";
i++;
}
return s2;
}