字符串

344. 反转字符串

  1. class Solution {
  2. public void reverseString(char[] s) {
  3. int len = s.length;
  4. int i = 0,j = len-1 ;
  5. while(i<=j){
  6. swap(s,i,j);
  7. i++;
  8. j--;
  9. }
  10. }
  11. public void swap(char[] s,int a,int b){
  12. char c = s[a];
  13. s[a] = s[b];
  14. s[b] = c;
  15. }
  16. }

541. 反转字符串 II

没有专门的函数可以用来反转字符串,想要反转就只能自己写反转函数

class Solution {
    public String reverseStr(String s, int k) {
        int len = s.length();
        char[] arr = s.toCharArray();
        for(int i = 0;i<len;i+=2*k){
            reverse(arr,i,Math.min(i+k,len)-1);
        }
        return new String(arr);
    }
    public void reverse(char[] arr,int left,int right){
        while(left<right){
            char temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;
        }
    }
}

剑指 Offer 05. 替换空格

class Solution {
    public String replaceSpace(String s) {
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<s.length();++i){
            char c = s.charAt(i);
            if(c == ' ') sb.append("%20");
            else sb.append(c);
        }
        return sb.toString();
    }
}

很多时候,String都需要转换成char数组来实现操作。

151. 翻转字符串里的单词

class Solution {
    public String reverseWords(String s) {
        //除去开头和末尾的空白字符
        s = s.trim();
        // Arrays.List() 将数组返回给list
        // 正则匹配连续的空白字符作为分隔符分割
        // "\\s+" :\\s表示空格 回车 换行等空白符 + 表示一个或多个
        List<String> list = Arrays.asList(s.split("\\s+"));
        Collections.reverse(list);
        return String.join(" ",list);
    }
}

trim(): 去掉首尾空格
Arrays.asList(): 返回一个list

剑指 Offer 58 - II. 左旋转字符串

class Solution {
    public String reverseLeftWords(String s, int n) {
        char[] arr = s.toCharArray();
        //java 数组没有reverse操作
        reverse(arr,0,n-1);
        reverse(arr,n,arr.length-1);
        reverse(arr,0,arr.length-1);
        return new String(arr);
    }
    // 那我就自己写一个reverse就好了
    public void reverse(char[] arr,int left,int right){
        char temp;
        while(left<=right){
            temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;
        }
    }
}

28. 实现 strStr()

class Solution {
    public int strStr(String haystack, String needle) {
        // KMP还是不会写
        char[] arrH = haystack.toCharArray();
        char[] arrN = needle.toCharArray();

        int lenH = arrH.length;
        int lenN = arrN.length;

        for(int i = 0;i+lenN<=lenH;i++){
            boolean flag = true;
            for(int j = 0;j<lenN;j++){
                if(arrH[i+j]!=arrN[j]){
                    flag = false;
                    break;
                }
            }
            if(flag){
                return i;
            }
        }
        return -1;
    }
}