LintCode 53. 翻轉字符串
問題描述
給定一個字符串,逐個翻轉字符串中的每個單詞。
說明
單詞的構成:無空格字母構成一個單詞
輸入字符串是否包括前導或者尾隨空格?可以包括,但是反轉後的字符不能包括
如何處理兩個單詞間的多個空格?在反轉字符串中間空格減少到只含一個
樣例
“How are you?”–>”you? are How”
問題分析
由樣例可知,變換後的字符串是由輸入的字符串整個翻轉但單詞不翻轉,可以先將整個字符串翻轉,在翻轉單詞就可以了,注意空格的操作。
代碼
class Solution {
public:
/*
* @param s: A string
* @return: A string
*/
string reverseWords(string &s) {
// write your code here
if (s == "") return s;
string s1 = "";
int count = 0;
reverse(s.begin(),s.end());
for (int i = 0; i < s.length(); i++) {
if (s[i] != ' ') {
count = counts(s,i);
reverse(s.begin() + i ,s.begin() + i + count);
s1 += s.substr(i,count) + " ";
i += count - 1;
}
}
return s1;
}
int counts(string &s,int num) {
int count = 0;
for(int i = num; i < s.length(); i++) {
if(s[i] != ' ')
count++;
else
break;
}
return count;
}
};
代碼思路
int counts(string &s,int num)這個函數的作用是記錄每一個單詞的長度,這樣就可以翻轉指定長度的單詞。