mxllcf

导航

字符串

空格替换:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

 

class Solution {
    public String replaceSpace(String s) {
        int length = s.length();
        char [] array = new char[length * 3];
        int size = 0;
        for (int i = 0; i < length; i++) {
            char c = s.charAt(i);
            if (c == ' ') {
                array[size++] = '%';
                array[size++] = '2';
                array[size++] = '0';
            } else {
                array[size++] = c;
            }
        }
        String newStr = new String(array, 0, size);
        return newStr;
    }
}

首先获取这个字符串的长度,然后维护一个数组,由于每一项如果是空格,那么就需要变成%20.那么长度就会新增,所以该数组长度为3倍length。

char c = s.charAt(i)

字符串的这个方法是:获取字符串这个坐标的哪个字符。然后提取出来。

 

新增一个字符串作为结果返回的方式:其实就是从array中,从0开始截取到size。然后转换成一个字符串。

String newStr = new String(array, 0, size);

 

 

 

左旋转字符串:

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

 

/////////////////////////////////////////////////////

不使用额外空间的做法,仅在字符串内改变:

 

class Solution {
    public String reverseLeftWords(String s, int n) {
        int len = s.length();
        StringBuilder sb = new 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 tmp = sb.charAt(start);
            sb.setCharAt(start,sb.charAt(end));
            sb.setCharAt(end,tmp);
            start++;
            end--;
        }
    }
}

这个题的思路是:

首先反转前n个数,再反转n到结尾的数,最后全反转一遍。

(或者先全反转,再依次反转两个区间也一样)

 

使用方法:

由于String是不可变的。如果要是改变其实原理上是重新创建了一个新的字符串,然后改变引用指向新的字符串、。

我们需要借助使用StringBuilder来完成这一操作。

StringBuilder实现了父类AbstractStringBuilder中的setCharAt()方法.

这里还借助了其父类的reverse方法:直接反转整个字符串。

 

2、切片:使用substring方法:

 

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

 

posted on 2021-11-03 10:51  mxllcf  阅读(34)  评论(0编辑  收藏  举报