LeetCode 557 反转字符串中的单词 III
问题描述:
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
使用额外空间
- 从第一个非空格位置开始记录单词的长度len,直到下一个空格为止i为止
- 将[i-len, i-1]范围内的单词进行翻转
执行用时:10 ms, 在所有 Java 提交中击败了35.30%的用户
内存消耗:40.2 MB, 在所有 Java 提交中击败了73.04%的用户
class Solution {
public String reverseWords(String s) {
if(s==null || s.length()==0) {
return s;
}
StringBuffer strBuffer = new StringBuffer();
strBuffer.append(s);
int len = 0;
int left = 0, right = 0;
for(int i=0; i<s.length(); i++) {
if(s.charAt(i)!=' '){
len++;
}
else if(i>0 && s.charAt(i)==' ') {
/*翻转*/
left = i-len;
right = i-1;
swap(strBuffer, left, right);
len=0;
}
}
/*将最后一个单词翻转*/
if(s.charAt(s.length()-1)!=' ') {
swap(strBuffer, s.length()-len, s.length()-1);
}
return strBuffer.toString();
}
/*翻转strBuffer中[left, right]范围内的字符串*/
public void swap(StringBuffer strBuffer, int left, int right) {
while(left<right) {
char tmp = strBuffer.charAt(left);
strBuffer.setCharAt(left,strBuffer.charAt(right));
strBuffer.setCharAt(right,tmp);
left++;right--;
}
}
}