一、 剑指 Offer 05. 替换空格

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

解法1: StringBuilder结合.equals

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public String replaceSpace(String s) {
StringBuilder sb = new StringBuilder();
for(String each: s.split("")){
if(each.equals(" ")){
sb.append("%20");
continue;
}
sb.append(each);
}
return sb.toString();

}
}

解法2: String的replace方法

1
2
3
4
5
class Solution {
public String replaceSpace(String s) {
return s.replace(" ", "%20");
}
}

解法3: 使用charAt分割和StringBuilder

1
2
3
4
5
6
7
8
9
10
11
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();
}
}

解法4:双指针法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public String replaceSpace(String s) {
if(s == null || s.length() == 0){
return s;
}
//扩充空间,空格数量2倍
StringBuilder str = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i) == ' '){
str.append(" ");
}
}
//若是没有空格直接返回
if(str.length() == 0){
return s;
}
//有空格情况 定义两个指针
int left = s.length() - 1;//左指针:指向原始字符串最后一个位置
s += str.toString();
int right = s.length()-1;//右指针:指向扩展字符串的最后一个位置
char[] chars = s.toCharArray();
while(left>=0){
if(chars[left] == ' '){
chars[right--] = '0';
chars[right--] = '2';
chars[right] = '%';
}else{
chars[right] = chars[left];
}
left--;
right--;
}
return new String(chars);
}

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

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

解法1: 循环与StringBuilder拼接,切片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public String reverseLeftWords(String s, int n) {
String[] strArr = s.split("");
StringBuilder sb = new StringBuilder();
for(int i = n; i<strArr.length;i++){
sb.append(strArr[i]);
}
for(int j = 0; j< n ; j++){
sb.append(strArr[j]);
}

return sb.toString();

}
}

解法2: 调用substring

使用子字符串拼接。

1
2
3
4
5
6
7
class Solution {
public String reverseLeftWords(String s, int n) {
return s.substring(n, s.length()) + s.substring(0, n);
}
}