标签:style blog class code java c
题目:
Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return
"blue is sky the
".
Clarification:
算法描述:
首先删除非法空格,包括前缀空格,后缀空格,以及冗余空格。为求效率,利用step计算需要搬移的步数,避免重复搬移。
其次两次reverse,完成题目。
时间复杂度O(n),空间复杂度O(1)。
AC代码:
1 class Solution { 2 public: 3 void _reverseWords(string &s, int left, int right){ 4 char tmp; 5 for(int i = 0; i <= (right-left)/2; i++){ 6 tmp = s[left+i]; 7 s[left+i] = s[right-i]; 8 s[right-i] = tmp; 9 } 10 } 11 12 void reverseWords(string &s) { 13 int left = 0; 14 int right = 0; 15 int step = 0; 16 int length = s.length(); 17 int deletespace = 1; 18 19 for(int i = 0; i < length; i++){ 20 if(s[i] == ‘ ‘){ 21 if(deletespace == 1){ 22 step++; 23 } 24 else 25 { 26 s[i - step] = s[i]; 27 } 28 deletespace = 1; 29 } 30 else{ 31 deletespace = 0; 32 s[i - step] = s[i]; 33 } 34 } 35 36 if(step != 0){ 37 s.erase(length-step, step); 38 } 39 40 if(s[s.length()-1] == ‘ ‘){ 41 s.erase(s.length()-1, 1); 42 } 43 44 _reverseWords(s, 0, s.length()-1); 45 46 for(int i = 0; i< s.length(); i++){ 47 if(s[i] == ‘ ‘){ 48 right = i - 1; 49 _reverseWords(s, left, right); 50 left = i + 1; 51 } 52 } 53 54 _reverseWords(s, left, s.length()-1); 55 } 56 };
[LeetCode]Reverse Words in a String,布布扣,bubuko.com
[LeetCode]Reverse Words in a String
标签:style blog class code java c
原文地址:http://www.cnblogs.com/Jason1573/p/3723972.html