AcWing打卡活动
《剑指Offer》打卡活动
周一第四题 替换空格
/**
* 如若从前向后遍历,时间复杂度将会是O(n^2),
* 如若从后至前遍历,提前拿到数组扩容的空间,则时间复杂度
* 将会优化到O(n)
* create by yifeng
*/
public class Solution {
public String replaceSpaces(StringBuffer str) {
char[] charArr = str.toString().toCharArray();
int count = 0;
// 遍历数组,提前拿到空格数量
for(int i = 0; i < charArr.length; i++) {
if(charArr[i] == ' ') count ++;
}
// 利用拿到的空格数量申请辅助空间
char[] newCharArr = new char[charArr.length + count * 2];
int indexOfNew = newCharArr.length - 1;
// 从后至前遍历
for(int i = charArr.length - 1; i >= 0; i--) {
// 遇到空格则修改
if(charArr[i] == ' ') {
newCharArr[indexOfNew--] = '0';
newCharArr[indexOfNew--] = '2';
newCharArr[indexOfNew--] = '%';
} else {
newCharArr[indexOfNew--] = charArr[i];
}
}
return String.valueOf(newCharArr);
}
}