繁体   English   中英

leetcode中的字符串中反词的单行代码序列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM