建设旅游网站数据库设计,百度收录什么意思,做图赚钱的网站,wordpress 样式链接#xff1a;力扣344-反转字符串
链接#xff1a;力扣541-反转字符串||
链接#xff1a;剑指 Offer 05. 替换空格
链接#xff1a;力扣151- 反转字符串的单词
链接#xff1a;剑指 Offer 58 - II. 左旋转字符串 链接#xff1a;力扣344-反转字符串
思路#xff…链接力扣344-反转字符串
链接力扣541-反转字符串||
链接剑指 Offer 05. 替换空格
链接力扣151- 反转字符串的单词
链接剑指 Offer 58 - II. 左旋转字符串 链接力扣344-反转字符串
思路以中间为分界线左右两个边界交换字符依次向里收缩
class Solution {public void reverseString(char[] s) {int n s.length;for(int i 0, j n-1; ij; i,j--){char tmp s[i];s[i] s[j];s[j] tmp;}}
}链接力扣541-反转字符串||
思路 首先字符串转化为字符数组 char[] res s.toCharArray(); 最后将数组再转回字符串 return new String(res); 1、循环以2k为单位 2、在这个2k长的数组中进行反转需要有首尾索引 3、start就是iend在循环过程中为ik-1如果到数组最后且不够k个直接将length-1作为尾
class Solution {public String reverseStr(String s, int k) {// 字符串转化为字符数组char[] res s.toCharArray();// 这段的逻辑// 1、循环以2k为单位// 2、在这个2k长的数组中进行反转需要有首尾索引// 3、start就是iend在循环过程中为ik-1如果到数组最后且不够k个直接将length-1作为尾for(int i 0; i res.length; i 2*k){int start i;int end Math.min(start k - 1, res.length-1);reverse(res,start,end);}return new String(res);}public char[] reverse(char[] ch,int i,int j){int n ch.length;while(i j){char tmp ch[i];ch[i] ch[j];ch[j] tmp;i;j--;}return ch;}
}链接剑指 Offer 05. 替换空格
思路 循环过程中都把字符串转为了字符数组这样方便遍历 使用双指针方法不使用额外空间 1、用StringBuider先把需要增加的空间给算出来 2、用两个指针left指向旧字符串的末尾right指向新字符串的末尾 一旦遇到旧字符的空位新字符串需要加’0’,‘2’,%这三个字符 如果没遇到空位则直接让新串right旧串left 最后再进行left–right– 3、特殊情况s串为空或者长度为0遍历之后发现s串中没有空格需要添加的
class Solution {public String replaceSpace(String s) {// 如果s为空或者长度为0if(s null || s.length() 0) return s;char[] arr s.toCharArray();StringBuilder str new StringBuilder();for(int i 0; i arr.length; i){if(arr[i] ){str.append( );}}// 如果str为0则说明原字符串无空格if(str.length() 0) return s;int left s.length()-1;//串的拼接s str.toString();int right s.length()-1;char[] ch s.toCharArray();//循环条件旧串一直到最前面一个while(left 0){if(ch[left] ){ch[right--] 0;ch[right--] 2;ch[right] %;}else{ch[right] ch[left];}left--;right--;}//最后将字符数组直接放入String中return new String(ch);}
}链接力扣151- 反转字符串的单词
思路 1、先处理单词中可能的多余空格 2、整个串全部反转 3、串中的单词逐个反转回来
class Solution {public String reverseWords(String s) {StringBuilder sb removeSpace(s);reverseString(sb,0,sb.length()-1);reEachWord(sb);return sb.toString();}private StringBuilder removeSpace(String s){int start 0;int end s.length() - 1;//删除前后位置的空格while (s.charAt(start) ) start;while (s.charAt(end) ) end--;StringBuilder sb new StringBuilder();while(start end){char c s.charAt(start);// 下面的循环可以保证每个单词间只有一个空格// if的第一个条件保证空格前的单词可以进入sb中// 当c 时第二个条件发挥作用// if的第二个条件保证单词与单词间只有一个空格// 当c 且sb.charAt(sb.length() - 1) 时则说明有多余的空格start需要if(c ! || sb.charAt(sb.length() - 1) ! ){sb.append(c);}start;}return sb;}/*** 反转字符串指定区间[start, end]的字符*/public void reverseString(StringBuilder sb, int start, int end) {// System.out.println(ReverseWords.reverseString() called with: sb [ sb ], start [ start ], end [ end ]);while (start end) {char temp sb.charAt(start);sb.setCharAt(start, sb.charAt(end));sb.setCharAt(end, temp);start;end--;}// System.out.println(ReverseWords.reverseString returned: sb [ sb ]);}private void reEachWord(StringBuilder sb){int start 0;int end 1;int n sb.length();// 第一个遍历整个带空格的字符串的遍历while(start n){// 第二个遍历对每个单词进行遍历// 直到遍历到end为空结束while(end n sb.charAt(end) ! ){end;}// end - 1 是因为end现在指向的是空reverseString(sb,start,end-1);// end为空1是下一个单词的开始start end 1;end start 1;}}
}链接剑指 Offer 58 - II. 左旋转字符串
思路
用substring的思路将前n个存到sb串中把前几个截走再接上sb串 不用substring的思路先反转前n个再反转后面的最后整体反转一次 使用substring() class Solution {public String reverseLeftWords(String s, int n) {StringBuilder sb new StringBuilder();for(int i 0; i n; i){sb.append(s.charAt(i));}String newstr s.substring(n);newstr sb.toString();return newstr;}
}三次反转代码 class Solution {public String reverseLeftWords(String s, int n) {int lens.length();StringBuilder sbnew StringBuilder(s);reverseString(sb,0,n-1);reverseString(sb,n,len-1);return sb.reverse().toString();}public void reverseString(StringBuilder sb, int start, int end) {while (start end) {char temp sb.charAt(start);sb.setCharAt(start, sb.charAt(end));sb.setCharAt(end, temp);start;end--;}}
}