LeetCode--151.反转字符串中的单词(字符串/双指针法)
151.反转字符串中的单词题目描述给你一个字符串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 解释如果两个单词间有多余的空格反转后的字符串需要将单词间的空格减少到仅有一个。提示1 s.length 104s包含英文大小写字母、数字和空格 s中至少存在一个单词**进阶**如果字符串在你使用的编程语言中是一种可变数据类型请尝试使用O(1)额外空间复杂度的原地解法。解题思路1、移除字符串中多余的空格并重建字符串2、反转字符串3、反转字符串中的单词代码classSolution{publicstaticchar[]removeSpace(Strings){// 使用字符数组char[]arrays.toCharArray();// 用快慢指针移除空格// 慢指针用于写数据intslow0;// 快指针用于读数据for(intfast0;fastarray.length;fast){// 如果读到不是空格再写if(array[fast]! ){if(slow!0){// 为该单词前加上空格array[slow] ;}//写完一个单词while(fastarray.lengtharray[fast]! ){array[slow]array[fast];}}}// resize数组大小为slow大小char[]newArraynewchar[slow];for(inti0;islow;i){newArray[i]array[i];}returnnewArray;}publicstaticchar[]reverseCharArray(char[]s,intstart,intend){// 反转字符串数组intleftstart;intrightend-1;while(leftright){s[left]^s[right];s[right]^s[left];s[left]^s[right--];}returns;}publicstaticStringreverseWordInCharArray(char[]s){// 反转每个单词intstart0;for(inti0;is.length;i){// 反转条件判断if(is.length||s[i] ){intendi;sreverseCharArray(s,start,end);starti1;}}returnnewString(s);}publicStringreverseWords(Strings){// 移除字符串中多余的空格char[]sArrayremoveSpace(s);// 反转字符串数组sArrayreverseCharArray(sArray,0,sArray.length);// 反转单词sreverseWordInCharArray(sArray);returns;}}