网站建设和维护要花多少钱,游戏源码出售,重庆专业网站营销,wordpress邮件客户端给你一个字符串 s #xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意#xff1a;输入字符串 s中可能会存在前导空格、尾随空格… 给你一个字符串 s 请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中单词间应当仅用单个空格分隔且不包含任何额外的空格。 输入s the sky is blue
输出
blue is sky the 看到图片中的操作我觉得我们的第一印象应该是先用Stirng()中的方法tirm()将字符串两边的空白字符给去掉然后再用toCharArray()方法将字符转换为char数组然后再倒叙遍历数组填充到一个新的字符串中去这道题就结束了可是真的是这样么
public String reverseWords(String s) {if(s.length()0){return ;}//去掉两边的空格ss.trim();//trim函数需要返回一个新的字符串这里千万别忘记//根据“”进行分割String[] strs.split( );String s1;for (int i str.length-1; i0; i--) {if(i0){s1str[i];}else{s1str[i] ;}}s1s1.trim();return s1;} 原来这个题目中测试案例字符串中中间间隔的不一定只有一个空字符串甚至有多个空字符串所以我们就要对正则表达式中的规则进行一点改变
String[] strs.split(\\s);//匹配多个空白字符 过程是痛苦的但是结局确实好的
接下来给大家介绍一种比较高效的方法解决本题双指针 这时候有很多人就会要问了如果遍历字符串的话每个指针只能指向一个字符反转的话只能使一个字符进行翻转怎么样才可以做到对整个单词进行翻转呢一个指针当然只可以指向一个字符了但是两个指针就可以确定一个单词我们可以寻找空格的位置去确定我们单词的位置 我们做的前提得是两边没有空格的字符串所以我们首先用String类中的trim()函数进行去除 //去掉两边的空格String s1s.trim();
在操作字符串的时候我们经常将String类型转换为StringBuilder类型进行字符串的操作
StringBuilder resnew StringBuilder(); 因为我们需要进行对原字符串进行反转干脆我们一开始就从最后面开始这样可以省去一次翻转的时间
int is1.length()-1;
int ji;
while(i0){...}
因为我们的字符串两边没有空格所以我们依靠中间两个单词之间的空格来确定单词的界限
while(i0s1.charAt(i)! ){i--;} 因为我们要将这个字符串截取出来将其加入到StringBuilder中substring(start,end)函数是一个左闭右开的取值范围 res.append(s1.substring(i1,j1) );
如果两个单词间隔许多空格的话我们需要跳过这些空格去寻找下一个单词的末尾字符 while(i0s1.charAt(i) ){i--;}
同步j指针说明找到了一个新的单词重复上面的步骤
ji; 源代码如下 public String reverseWords(String s) {if(s.length()0){return ;}//去掉两边的空格String s1s.trim();StringBuilder resnew StringBuilder();int is1.length()-1;int ji;while(i0){while(i0s1.charAt(i)! )i--;res.append(s1.substring(i1,j1) );while(i0s1.charAt(i) )i--;ji;}return res.toString().trim();}