leetcode-zgd-day8-344.反转字符串/541. 反转字符串II/剑指Offer 05.替换空格/151.翻转单词/剑指Offer58左旋转字符

798 阅读1分钟

344.反转字符串

题目链接:344. 反转字符串 - 力扣(LeetCode)

调包!疯狂的调包!我是调包侠,调包nb。

总体思路就是 char[]->String->StringBuilder->String->char[]

 class Solution {
     public void reverseString(char[] s) {
         System.arraycopy(new StringBuilder(new String(s)).reverse().toString().toCharArray(), 0, s, 0, s.length);
     }
 }

双指针法实现:

 class Solution {
     public void reverseString(char[] s) {
         int left = 0, right = s.length - 1;
         while(left < right){
             s[left] ^= s[right];
             s[right] ^= s[left];
             s[left] ^= s[right];
             left++;
             right--;
         }
         return;
     }
 }

541. 反转字符串II

题目链接:541. 反转字符串 II - 力扣(LeetCode)

该题目我想到用一个标识符来记录当前区段的字符串是否需要翻转

 class Solution {
     public String reverseStr(String s, int k) {
         StringBuilder stringBuilder = new StringBuilder();
         boolean flag = true;
         int l = 0;
         while(l + k <= s.length()){
             if(flag == true){
                 stringBuilder.append(reverseIt(s.substring(l, l + k)));
                 flag = false;
             }else{
                 stringBuilder.append(s.substring(l, l + k));
                 flag = true;
             }
             l = l + k;
         }
         if(l < s.length() && flag == true) stringBuilder.append(reverseIt(s.substring(l, s.length())));
         else if(l < s.length() && flag == false) stringBuilder.append(s.substring(l, s.length()));
         return stringBuilder.toString();
     }
     public String reverseIt(String s){
         return new StringBuilder(s).reverse().toString();
     }
 }

剑指Offer 05.替换空格

题目链接:剑指 Offer 05. 替换空格 - 力扣(LeetCode)

创建一个StringBuilder用来接受结果字符串。最后将其转换成String

 class Solution {
     public String replaceSpace(String s) {
         StringBuilder stringBuilder = new StringBuilder();
         char[] record = s.toCharArray();
         for(char c : record){
             if(c == ' '){
                 stringBuilder.append("%20");
             }
             else{
                 stringBuilder.append(c);
             }
         }
         return stringBuilder.toString();
     }
 }

151.翻转字符串里的单词

题目链接:151. 反转字符串中的单词 - 力扣(LeetCode)

这里先给出对应的api解法,其他方法有时间会补充上

 // api解法
 class Solution {
     public String reverseWords(String s) {
         // 方法一:利用Java的API
         List<String> wordList = Arrays.asList(s.trim().split("\s+"));
         Collections.reverse(wordList);
         return String.join(" ", wordList);
     }
 }

剑指Offer58-II.左旋转字符串

题目链接:剑指 Offer 58 - II. 左旋转字符串 - 力扣(LeetCode)

这里给出该题目的api解法。其他解法有空补充

 class Solution {
     public String reverseLeftWords(String s, int n) {
         StringBuilder stringBuilder = new StringBuilder();
         stringBuilder.append(s.substring(n,s.length()));
         stringBuilder.append(s.substring(0,n));
         return stringBuilder.toString();
     }
 }