class Solution {
/**
思路:1.双指针法进行解决
2.我们先统计出空格的数量,然后再按空格数*2,扩充成字符串,加入到原来的字符串中
3.然后我们定义两个指针 一个是原来数组长度的指针 一个是扩充完数组长度下标的指针
4.当我们原来数组长度的指针遇见空格的时候,这时候,就开始添加 % 2 0
遇见不到就正常赋值
5.关于我们为什么是从字符串倒着顺序来的,因为这样的话,我们就不用移动大量的字符
*/
public String replaceSpace(String s) {
if (s == null) return null;
StringBuilder str = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
str.append(" ");//增加两个空格
}
}
int oldl = s.length()-1;
s+=str;
int newl = s.length()-1;
char[] chars = s.toCharArray();//字符串转换成字符数组
for (int i = oldl,j = newl; i < j; i--,j--) {
if (chars[i] != ' ') {
chars[j] = chars[i];
} else {
chars[j] = '0';
chars[j-1] = '2';
chars[j-2] = '%';
j = j-2;
}
}
return new String(chars);
//错误用法
// for (int i = oldl,j = newl; i < j; i--,j--) {
// if (s.charAt(i) != ' ') {
// s.charAt(j) = s.charAt(i);
// } else {
// s.charAt(j) = '0';
// s.charAt(j-1) = '2';
// s.charAt(j-2) = '%';
// j = j-2;
// }
// }
// return s;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)