Reverse Words in a String

来源:互联网 发布:mac图片处理 编辑:程序博客网 时间:2024/05/17 23:12

1.题目

给定一个字符串,逐个翻转字符串中的每个单词。

  • 单词的构成:无空格字母构成一个单词
  • 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
  • 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个

给出s = "the sky is blue",返回"blue is sky the"

2.算法

    public String reverseWords(String s)     {        // write your code    s = s.trim();    return helper(s, 0).toString();     }    public 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(" "); //递归下一个字母    }

算法的基本步骤是

1.从前往后,见到单词就把它加到前面

    public String reverseWords(String s)     {        // write your code    if (s == null)    {    return null;    }    s = s.trim();    if (s.length() == 0)    {    return "";    }    StringBuilder sb = new StringBuilder();    for (int i = s.length() - 1; i >= 0; i--) //反转字符串,并把多余空格去掉,两单词中只留一个空格    {    if (i != s.length() - 1 && s.charAt(i) == ' ' && s.charAt(i) == s.charAt(i + 1))    {    continue;    }    sb.append(s.charAt(i));    }    int left = 0; //把单词反转    int right = 0;    while (right < sb.length())    {    while (right < sb.length() && sb.charAt(right) != ' ')    {    right++;    }    int next = right + 1;    right--;    while (left < right)    {    char temp = sb.charAt(left);    sb.setCharAt(left++, sb.charAt(right));    sb.setCharAt(right--, temp);    }    left = next;    right = next;    }    return sb.toString();    }

算法基本步骤是

先把整个串反转并且同时去掉多余的空格,然后再对反转后的字符串对其中的每个单词进行反转,比如"the sky is blue",先反转成"eulb si yks eht",然后在对每一个单词反转,得到"blue is sky the"

0 0