给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例:
输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
提示:
在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
char[] arr=s.toCharArray();
public class Solution {
public String reverseWords(String s) {
char[] arr=s.toCharArray();
int start = 0;
for (int i = 0; i <arr.length ; i++) {
if(arr[i]==' '){
reverve(arr,start,i-1);
start = i+1;
continue;
}
if(i==arr.length-1){
reverve(arr,start,arr.length-1);
}
}
return new String(arr);
}
public void reverve(char[] arr,int l , int r){
while(l<r){
char temp = arr[r];
arr[r] = arr[l];
arr[l] = temp;
l++;
r--;
}
}
}
将一个字符串转化为一个字符数组,使用方法为char[] arr = s.toCharArray();
将字符数组从左到右遍历,找到一个空格,也就是" ",即代表找到了一个单词,将这个单词置换,定义reverve()方法(单词写错了)。将单词前后置换,reverve中的参数是reverve(arr,start,i-1),因为i此时在空格位置,所以要减一。当找到最后一个单词,即当i=arr.length-1;时,最后一个单词找到了。对最后一个单词置换。完毕之后返回一个新字符串
return new String(arr);
该方法的时间复杂度为o(N)
空间复杂度应该也是o(N)
官方解法中生成一个动态字符串的方法是:
StringBuffer ret = new StringBuffer();