一、剑指 Offer 05. 替换空格
题干
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
思路:第一次使用了java中String的库函数replaceAll(),提交后效率太低。debug进replaceAll源码发现,源码中每次对字符串进行替换操作时,都要对原字符串进行一次正则匹配后才替换…。第二次使用StringBuffer作为辅助变量,大大提高了效率。
replaceAll部分源码
public String replaceAll(String replacement) {
reset();
boolean result = find();
if (result) {
StringBuffer sb = new StringBuffer();
do {
//在这里每次替换前都需要进行一次正则匹配之后替换
appendReplacement(sb, replacement);
result = find();
} while (result);
appendTail(sb);
return sb.toString();
}
return text.toString();
}
题解
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();
}
}
二、剑指 Offer 58 - II. 左旋转字符串
题干
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
class Solution {
public String reverseLeftWords(String s, int n) {
return s.substring(n) + s.substring(0, n);
}
}