[英]the sequence of one-line code of Reverse Words in a string on leetcode
关于这个问题的一个答案,我有一个小问题。 问题就像
给定输入字符串,逐个单词地反转字符串。
例如,给定s =“天空是蓝色”,则返回“蓝色是天空”。
答案是
public class Solution {
public String reverseWords(String s) {
s = s.trim();
return helper(s,0).toString();}
private StringBuilder helper(String s, int index){
if(index>=s.length())
return new StringBuilder();
StringBuilder cur = new StringBuilder();
int lastIndex = index;
while(index < s.length() && s.charAt(index)!=' ')
{
cur.append(s.charAt(index++));
}
while(index < s.length() && s.charAt(index)==' ')
index++;
if(lastIndex == 0)
return helper(s,index).append(cur);
return helper(s,index).append(cur).append(' ');}
我对这段代码的最后一行有疑问。 为什么append(cur)在append('')之前? 不应该吗?
考虑代码的这一部分:
if(lastIndex == 0)
return helper(s,index).append(cur);
return helper(s,index).append(cur).append(' ');
在第一次调用helper时条件(lastIndex == 0)
为true,在这种情况下cur
包含第一个单词, helper(s,index)
以相反的顺序返回其余单词。
因为在这种情况下,由于您将第一个单词追加到反向StringBuilder
的其余部分而没有添加空格,因此这意味着helper(s,index)
必须在反向子字符串之后追加一个空格。
例如,假设您有一个String:
一二三
helper(s,index)
必须返回“三二”,并在其后附加“一”以获取反转的字符串。
下一个对helper的调用将返回“ Three”,在其上附加“ Two”,然后添加一个空格。
下一个调用返回一个空的StringBuilder,在该字符串上附加“ Three”,然后附加一个空格。
您可以用以下单行替换上面的三行:
return helper(s,index).append(' ').append(cur);
但是,在这种情况下,输出将在开始处有一个额外的空格,因为对helper
的最后一次调用将返回一个空的StringBuilder,因此,如果在该空格之后添加空格,则该空格将是输出的第一个字符。
您可以添加其他条件来消除该额外空间:
StringBuilder sub = helper(s,index);
if (sub.length() > 0)
sub.append(' '); // append a space only if it's not the
// first char of the output
return sub.append(cur);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.