代码随想录-2023/07/06

77 阅读1分钟

字符串

344.反转字符串

  1. 调用库函数

代码:

class Solution {
    public void reverseString(char[] s) {
        // 1.调用库函数
        char[] ch = new StringBuffer(new String(s)).reverse().toString().toCharArray();
        for(int i=0; i<s.length; i++){
            s[i] = ch[i];
        }
    }
}

541.反转字符串II

解题思路:

双指针遍历, i和j的距离始终是2*k, 对于不超过字符串长度的进行处理, 对于超过长度的另外处理, 模拟题

代码:

class Solution {
    public String reverseStr(String s, int k) {
        StringBuilder sb = new StringBuilder();

        // 双指针遍历
        int i = 0, j = 0;
        for(i=0,j=2*k; j<=s.length(); i=j, j+=2*k){
            StringBuilder str = new StringBuilder(s.substring(i, i + k)).reverse();
            sb.append(str).append(s.substring(i + k, j));
        }

        // 处理剩余字符
        if(j > s.length()) {
            String str = s.substring(i);
            if(str.length() >= k) {
                sb.append(new StringBuilder(str.substring(0, k)).reverse());
                sb.append(str.substring(k));
            } else {
                sb.append(new StringBuilder(str).reverse());
            }
        }

        return sb.toString();
    }
}

剑指offer 05 替换空格

调用库函数

代码:

class Solution {
    public String replaceSpace(String s) {
        return s.replace(" ", "%20");
    }
}

151.翻转字符串里的单词

解题思路: 以空格分割字符串得到字符串数组, 然后将倒序遍历字符串数组, 遇到空字符就跳过,否则将其拼接成字符串, 中间加上空格

代码:

class Solution {
    public String reverseWords(String s) {
        s = s.trim();
        String[] str = s.split(" ");

        StringBuilder sb = new StringBuilder();

        for(int i=str.length-1; i>=0; i--){
            if(!str[i].equals(""))
            sb.append(str[i]).append(" ");
        }

        return sb.toString().trim();

    }
}

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

解题思路: 截取子串然后拼接

代码:

class Solution {
    public String reverseLeftWords(String s, int n) {
        return s.substring(n) + s.substring(0, n);  
    }
}