zoukankan      html  css  js  c++  java
  • 151. Reverse Words in a String

    题目:

    Given an input string, reverse the string word by word.

    For example,
    Given s = "the sky is blue",
    return "blue is sky the".

    Update (2015-02-12):
    For C programmers: Try to solve it in-place in O(1) space.

    click to show clarification.

    Clarification: 
    • What constitutes a word?
      A sequence of non-space characters constitutes a word.
    • Could the input string contain leading or trailing spaces?
      Yes. However, your reversed string should not contain leading or trailing spaces.
    • How about multiple spaces between two words?
      Reduce them to a single space in the reversed string.

    链接: http://leetcode.com/problems/reverse-words-in-a-string/

    6/13/2017

    8ms, 64%

    高亮部分是需要记住的Java String方法,reverse(char[], int start, int end)中start, end是左开右闭。

     1 public class Solution {
     2     public String reverseWords(String s) {
     3         if (s == null || s.equals("")) {
     4             return s;
     5         }
     6         char[] characters = s.toCharArray();
     7         int validLength = 0;
     8         for (int i = 0; i < s.length(); i++) {
     9             if (characters[i] != ' ' || i != 0 && characters[i - 1] != ' ') {
    10                 characters[validLength] = characters[i];
    11                 validLength++;
    12             }
    13         }
    14         if (validLength == 0) {
    15             return "";
    16         }
    17         if (characters[validLength - 1] == ' ') {
    18             validLength -= 1;
    19         }
    20 
    21         char[] trimmedChars = new char[validLength];
    22         for (int i = 0; i < validLength; i++) {
    23             trimmedChars[i] = characters[i];
    24         }
    25         reverse(trimmedChars, 0, validLength);
    26         int startIndex = 0;
    27         for (int i = 1; i <= validLength; i++) {
    28             if (i == validLength || trimmedChars[i] == ' ') {
    29                 reverse(trimmedChars, startIndex, i);
    30                 startIndex = i + 1;
    31             }
    32         }
    33         return String.copyValueOf(trimmedChars);
    34     }
    35     private void reverse(char[] chars, int start, int end) {
    36         for (int i = start, j = end - 1; i <= j; i++, j--) {
    37             char tmp = chars[i];
    38             chars[i] = chars[j];
    39             chars[j] = tmp;
    40         }
    41         return;
    42     }
    43 }

    还可以用string直接来操作,留给二刷或者其他题目

    别人用trim(), split()的方法,原来多个whitespace是用split(" +")作为regex来表示的

    https://discuss.leetcode.com/topic/11785/java-3-line-builtin-solution

    1 public String reverseWords(String s) {
    2     String[] words = s.trim().split(" +");
    3     Collections.reverse(Arrays.asList(words));
    4     return String.join(" ", words);
    5 }

    更多讨论

    https://discuss.leetcode.com/category/159/reverse-words-in-a-string

  • 相关阅读:
    css浮动
    css各种元素最原始的表现
    css3 unset属性
    js类式继承
    javascript编写Tab选项卡
    javaScript事件冒泡
    javascript中的&&与||的用法
    比较好的前端网站
    原生js开发tab选项卡之闭包
    冒泡排序(中级版)
  • 原文地址:https://www.cnblogs.com/panini/p/7003233.html
Copyright © 2011-2022 走看看