344. 反转字符串
344. 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1: 输入:s = ["h","e","l","l","o"] 输出:["o","l","l","e","h"] 示例 2: 输入:s = ["H","a","n","n","a","h"] 输出:["h","a","n","n","a","H"] 提示: 1 <= s.length <= 105 s[i] 都是 ASCII 码表中的可打印字符
题解
思路 左右指针 左右指针分别从头和尾开始遍历数组,交换元素直到左指针大于右指针
class Solution { public void reverseString(char[] s) { int left=0; int rigth=s.length-1; char ch; while(left<=rigth){ ch=s[left]; s[left]=s[rigth]; s[rigth]=ch; left++; rigth--; } } }
557. 反转字符串中的单词 III
557. 反转字符串中的单词 III 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例: 输入:"Let's take LeetCode contest" 输出:"s'teL ekat edoCteeL tsetnoc" 提示: 在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
题解
思路 取出每个单词进行翻转 空格表示单词结束
思路 快慢指针 fast指针来判断空格,直到char[]数组最后 当读取到空格时,就翻转[slow,fast) slow改为fast+1 最后一个单词要单独处理
class Solution { public String reverseWords(String s) { Solution solution=new Solution(); char[] chs=s.toCharArray(); int slow=0; int fast=1; while(fast<chs.length){ if(chs[fast]==' '){ solution.reverseString(chs,slow,fast); slow=fast+1; }else if(fast==chs.length-1){ solution.reverseString(chs,slow,fast+1); } fast++; } String reverseString=new String(chs); return reverseString; } public void reverseString(char[] s,int begin,int end) { int left=begin; int rigth=end-1; char ch; while(left<=rigth){ ch=s[left]; s[left]=s[rigth]; s[rigth]=ch; left++; rigth--; } } }