557.反转字符串中的单词 III
博主的思路:
将字符串转化为字符数组后,当遇到空格后就添加到 rst 上
这里要注意index和 ch数组(长的为字符串s+1)的意义
class Solution {
public String reverseWords(String s) {
String rst = "";
int index = 0;
char[] ch = new char[s.length()+1];
ch = s.toCharArray();
for(int i=0;i<ch.length;i++){
if(ch[i]!=' ' && i!=ch.length-1){
index++;
}else{
System.out.println("i="+i);
if(i!=ch.length){
for(int j=i-1;j>=i-index;j--){
rst = rst + (ch[j]+"");
}
rst += " ";
index = 0;
}else{
System.out.println("sdfsdf");
for(int j=i-1;j>=i-index;j--){
rst = rst + (ch[j]+"");
}
}
}
}
return rst;
}
}
但是运行结果却不理想,超时了。
然后我看了下第一名的代码,才3s
优点在于 调用的reserve方法直接传了3个参数进去,提高效率
还有start,nextSpace来进行定位,少了很多数组的操作
class Solution {
public String reverseWords(String s) {
char[] cl = s.toCharArray();
int start = 0;
int nextSpace = s.indexOf(' ',start);
while(nextSpace != -1) {
reverse(cl,start,nextSpace - 1);
start = nextSpace + 1;
nextSpace = s.indexOf(' ',start);
}
reverse(cl,start,cl.length - 1);
return new String(cl);
}
public void reverse(char[] cl,int start,int end){
while(start < end){
char temp = cl[start];
cl[start] = cl[end];
cl[end] = temp;
start ++;
end --;
}
}
}