酒店网站建设描述,楼盘信息在哪里能查到,专业国外网站建设,网站一直被攻击怎么办java数据结构与算法刷题目录#xff08;剑指Offer、LeetCode、ACM#xff09;-----主目录-----持续更新(进不去说明我没写完)#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 这道题#xff0c;可以理解为#xff0c;将字符串颠倒#xf…java数据结构与算法刷题目录剑指Offer、LeetCode、ACM-----主目录-----持续更新(进不去说明我没写完)https://blog.csdn.net/grd_java/article/details/123063846 解题思路 这道题可以理解为将字符串颠倒但是每个单词原来的顺序是什么还是什么不能改变单词的组合顺序比如appleable这个例子字符串颠倒后为ableapple。整个字符串顺序颠倒了但是apple和able这两个单词本身不可以变化。难点在于每个单词中间的空格个数是不确定的我们无法直接用split()等方法直接按照空格为分隔符将字符串分隔开来。会分隔出很多空字符串。所以我们不以单个单词这样一个字符串作为单位进行反转而是把整个字符串转换为字符数组进行判断 首先转换为字符数组 [ , , h, e, l, l, o, , w, o, r, l, d, , ]可以看到这个例子有很多空字符串然后我们先从左向右找到第一个非空字符[ , , h, e, l, l, o, , w, o, r, l, d, , ]然后继续向左找到第一个空格[ , , h, e, l, l, o,空格, w, o, r, l, d, , ]此时我们就找到了第一个单词的左右下标[ , , h, e, l, l, o, , w, o, r, l, d, , ]将其插入新的数组中[w, o, r, l, d, , ],这样就完成了第一个单词的反转工作也就是将最后一个单词放到第一个位置然后单词不进行变化然后重复上面的步骤直到所有单词处理完成 代码 class Solution {public String reverseWords(String s) {char[] arr s.toCharArray();//获取字符数组char[] newArr new char[s.length()1];//保存反转字符串的数组int index 0;//newArr的下标代表插入位置int i s.length()-1;//我们从后往前遍历将后面的元素依次插入到newArr的前面就实现了反转while(i 0){//只要还有元素可以遍历就继续while(i 0 arr[i] ) i--;//向左找到第一个非空格字符int right i;//让right指向它代表它是当前单词的最后一个字母位置while(i 0 arr[i] ! ) i--;//继续向左找第一个空格Afor(int j i 1; j right; j){//那么这个A空格右边第一个字符就是这个单词的起始位置newArr[index] arr[j];//将这个单词插入newArrif(j right){//如果插入完成newArr[index] ;//补上一个空格分隔开来}}}if(index 0){//如果没插入过字母就返回空串return ;}return new String(newArr, 0, index-1);//返回答案}
}