Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.
Example 1:
Input: "Let's take LeetCode contest" Output: "s'teL ekat edoCteeL tsetnoc"
Note: In the string, each word is separated by single space and there will not be any extra space in the string.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------我的方法,耗时22ms:
public class Solution {
public String reverseWords(String s) {
String[] array = s.split(" ");
StringBuilder sb = new StringBuilder();
char [] splitArray = null;
for(int i=0; i < array.length;i++){
splitArray = array[i].toCharArray();
int iLength = splitArray.length;
int start = 0;
int end = iLength;
char temp;
while(start < end){
temp=splitArray[start];
splitArray[start]=splitArray[end-1];
splitArray[end-1]=temp;
start++;
end--;
}
if(sb.length() == 0){
sb.append(new String(splitArray));
}else{
sb.append(" "+new String(splitArray));
}
}
return sb.toString();
}
}
另一种方法,耗时6ms:
public class Solution {
public String reverseWords(String s) {
char[] chars = s.toCharArray();
int i=0;
while(i<chars.length){
int wordEnd = getWordEnd(chars, i);
reverse(chars, i, wordEnd);
i = wordEnd+1;
}
return new String(chars);
}
public int getWordEnd(char[] chars, int i){
while(i < chars.length && chars[i]!=' '){
i++;
}
return i;
}
public void reverse(char[] chars, int from, int to){
//System.out.println("reverse "+Arrays.toString(chars)+" "+ from + " "+to);
for(int i=from; i<from + (to-from)/2;i++){
swap(chars, i, to - (i-from) - 1);
}
}
public void swap(char[] arr, int i, int j){
char tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}