首先声明,我既不是算法大牛,也不是项目老手,只是一个非常平凡的CSer。
觉得自己基础不是很好,所以打算开始刷Leetcode的题,用博客来把的一些想法分享给大家。
public class Solution {
public String reverseWords(String s) {
int count=0;
int start=0;
int end=s.length();
char cs[]=s.toCharArray();
for(int i=0;i<s.length();i++){
if(cs[i]==' ')start++; //去前面的的空格
else break;
}
for(int j=s.length()-1;j>=0;j--){
if(cs[j]==' ')end--; //去某位空格
else break;
}
if(s==""||start==s.length())return "";
s=s.substring(start, end); //此时s直可能单词间存在多个空格
char ss[]=s.toCharArray();
int k=s.length();
for(int i=0;i<k-1;i++){
if(ss[i]==' '&&ss[i+1]==' '){
s=s.substring(0,i+1-count).concat(s.substring(i+2-count,s.length())); //碰到连续两个空格s就去掉空格
count++;
}
}
String[] arg=s.split(" ");
s="";
for(int i=arg.length-1;i>=0;i--){
if(i!=0)s=s+arg[i]+" ";
else s=s+arg[i];
}
return s;
}
}
我第一次做Leetcode,第一道就花了很长时间。不得不说,Leetcode的题十分的严谨,对于空格的分析很详细。而且OJ很好用,可以知道是怎么错的。
在处理字符串之间的空格时,我就遇到了两个没怎么考虑的问题。
1.因为s字符串的长度一直在变,但是ss数组遍历的长度不能变,所以判断条件里不能有s.length()方法。
2.同样的的,s长度在变,但数组下标不会随之变化,所以我设了一个标志量,count修改数组下标。