-
- 反转字符串中的单词
整体思路:先将整体翻转,再进行翻转其中的单词,以空格划分进行单词操作,使用快慢指针思想,快指针获取符合题目要求的字母,慢指针是获取到字母后更新到哪里
代码如下:class Solution { public String reverseWords(String s) { char [] c = s.toCharArray();//将字符串转化成字符数组进行操作 //获得去除多余空格的字符数组 c = removeEmpty(c); //翻转整个字符串 reverse(c,0,c.length-1); //翻转每个单词 reverseEachWord(c); return new String(c); } public char[] removeEmpty(char [] arr){ //使用快慢指针进行多余空格的去除 int slow = 0; for(int fast = 0;fast<arr.length;fast++){ if(arr[fast]!=' '){//不是空格,如果是空格直接跳过,这样就能去掉多余空格 if(slow!=0){//判断是不是首字母,如果不是则赋值空格替代fast前一个空格,只留一个空格 arr[slow++]=' '; } while(fast<arr.length&&arr[fast]!=' '){//复制寻找单词 arr[slow++] = arr[fast++]; } } } char []newChar = new char[slow]; System.arraycopy(arr,0,newChar,0,slow); return newChar; } public void reverse(char [] ch,int left,int right){ if(right>=ch.length){ return; } while(left<right){ char temp = ch[left]; ch[left] = ch[right]; ch[right] = temp; left++; right--; } } public void reverseEachWord(char []ch){ int start = 0; for(int end = 0;end<=ch.length;end++){ if(end==ch.length||ch[end]==' '){//遇到空格进行单词翻转 reverse(ch,start,end-1); start = end+1; } } } }
- 卡码网:55.右旋转字符串
解题思路:先反转全部,再翻转前k个,再翻转剩余部分的
- 其余部分跳过进行二刷