2021年9月8日11:10:56
2021年9月8日11:44:43
卡半天在 边界判定上
首先对整体进行翻转 然后对 每个单词进行翻转 两次翻转就可以得到正确的
left right 代表单词 [,)左闭右开 因此right到最后一个词应该是能继续的right<=str.length() 有等号
res = res.substring(0,left) + temp + res.substring(right); 对res中的数组进行翻转
从 left 到right的位置 左闭右开
接下来主要判断是不是到结尾了 后面还有没有空格 如果还有 就说明可以继续 如果到结尾了 就退出循环结束 否则的话由于判断有等号 会一直循环
但是发现 每次都把left变成++right; 最后到结尾 会直接超出 不需要多余的判断
public class Solution { public String ReverseSentence(String str) { String res = Reverse(str); int left = 0; int right = 0; while(right<=str.length()){ if(right < res.length() && res.charAt(right) != ' ' ) {right++;continue;} String temp = Reverse(res.substring(left,right)); res = res.substring(0,left) + temp + res.substring(right); left = ++right; /***if(right == str.length()) break; //else left = ++right; 也是一样的 if(res.charAt(right) == ' '){ left = ++right; }***/ } return res; } public String Reverse(String str) { int length = str.length(); String reverse = ""; for (int i = 0; i < length; i++){ reverse = str.charAt(i) + reverse; } return reverse; } }