给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入: “Let’s take LeetCode contest”
输出: “s’teL ekat edoCteeL tsetnoc”
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
方法一:因为是字符串,需要放到一个数组中,然后for循环找到空格,再设置一个指针j。
class Solution {
public String reverseWords(String s) {
s=s.trim();
char[] ch=s.toCharArray();
int j=0;
int i=0;
for(i=0;i<ch.length;i++){
if(ch[i]==' '){
for(int k=0;k<(i-j)/2;k++){
//k<个数/2
ch[j+k]^=ch[i-1-k];
//一边加k,一边减k
//注意这里是j+k,不是j,这里调试了半天
ch[i-1-k]^=ch[j+k];
ch[j+k]^=ch[i-1-k];
}
j=i+1;
}
}
for(int k=0;k<(i-j)/2;k++){
ch[j+k]^=ch[i-1-k];
ch[i-1-k]^=ch[j+k];
ch[j+k]^=ch[i-1-k];
}
return new String(ch);
}
}
方法二:这里调用了StringBuilder的API,reverse,注意String里面没有这个API
class Solution {
public String reverseWords(String s) {
String[] str=s.split(" ");
StringBuilder res= new StringBuilder();
for(int i=0;i<str.length;i++){
res.append(new StringBuilder(str[i]).reverse().toString()+ " ");
}
return res.toString().trim();
}
}