淘宝做店招的网站,免费网站建设自助建站,网站前端开发语言,怎么做淘宝客网站和APP题目#xff1a;leetcode151. 反转字符串中的单词
描述#xff1a; 给你一个字符串 s #xff0c;请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结…题目leetcode151. 反转字符串中的单词
描述 给你一个字符串 s 请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中单词间应当仅用单个空格分隔且不包含任何额外的空格。
示例 1
输入s “the sky is blue” 输出“blue is sky the”
示例 2
输入s hello world 输出“world hello” 解释反转后的字符串中不能存在前导空格和尾随空格。
示例 3
输入s “a good example” 输出“example good a” 解释如果两个单词间有多余的空格反转后的字符串需要将单词间的空格减少到仅有一个。
思路 这是一道leetcode上的中等题难度还是有的。 首先我们得到一个字符串我们需要先去掉多余的空格我们使用两个指针指向字符串的第一个字符和最后一个字符然后判断当前字符是不是空格如果是则直接移动指针最后得到去掉首尾多余空格的字符串然后我们利用StringBuilder来将s中一个一个字符地加入StringBuilder中当StringBuilder的末尾已经有一个空格的时候如果s当前要加入StringBuilder的字符也是空格那么这个空格不再加入否则加入这就保证了单词之间只有一个空格。 去掉多余的空格之后我们需要将整个字符串反转具体的反转算法无非就是利用双指针一个指向头一个指向尾不断向中间靠近途中不断交换。 最后我们得到了一个每个单词里面的字母都是倒序的字符串我们需要将这个字符串里面的每个单词都反转一下无非就是找到一个字符串里面的单个单词然后对这个单词进行第二步操作罢了。那怎么识别一个单词呢我们利用一个指针不断操作遇到一个空格的时候就是一个单词的终点这就找到了一个单词。 具体看下面的代码
public class Solution{public String reverseWords(String s) {//去除多余的空格StringBuilder sbremoveSpace(s);//反转整个字符串reverseString(sb,0,sb.length()-1);//反转每一个单词reverseEachWord(sb);return sb.toString();}//去掉多余的空格比如首、尾的空格以及中间的连续空格中间的部分只保留一个private StringBuilder removeSpace(String s){int start0;int ends.length()-1;while(s.charAt(start) )start;while(s.charAt(end) )end--;StringBuilder sbnew StringBuilder();while (startend){if(s.charAt(start)! || sb.charAt(sb.length()-1)! )sb.append(s.charAt(start));start;}return sb;}//反转指定区间的字符串private void reverseString(StringBuilder sb,int start,int end){while (startend){char tsb.charAt(start);sb.setCharAt(start,sb.charAt(end));sb.setCharAt(end,t);start;end--;}}//反转一个字符串里面的每个单词private void reverseEachWord(StringBuilder sb){int start0;int end1;int lengthsb.length();while(startlength){while(endlength sb.charAt(end)! )end;reverseString(sb,start,end-1);startend1;endstart1;}}
}