小渣渣的算法学习笔记:2018秋招备战
数据结构类算法总结:字符串
1.题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy. 则经过替换之后的字符串为We%20Are%20Happy。
2.思路解析
比较传统的思路是从头到尾扫描字符数组,遇到空格就将其替换成“%20”;现在考虑从后往前复制和替换;
还可以直接使用StringBuffer类,使用str.charAt(i)扫描到空格就替换掉
3.代码实现
public class Solution02 { public static void main(String[] args) { Solution02 s = new Solution02(); char[] a = {'w','e',' ','a','r','e',' ','h','a','p','p','y'}; char[] b = new char[16]; s.ReplaceBlank(a,b,16); for(int i=0;i<b.length;i++){ System.out.print(b[i]); } } public void ReplaceBlank(char[] a,char[] b,int strLength){ int len = a.length; if(len <= 0) return; int originalLength = 0;//字符串str实际长度 int numberofBlank = 0;//空格的个数 int i = 0; while(i<len){//统计字符串中空格的个数 ++originalLength; if(a[i] == ' '){ ++numberofBlank; } ++i; } //计算空格替换后的长度 int newLength = originalLength + numberofBlank*2; if(newLength < strLength) return;//字符数组长度无法容纳替换后的新数组 int indexOfOriginal = originalLength -1;//原数组下标 int indexOfNew = newLength -1;//新数组下标 //从后往前替换字符 while(indexOfOriginal >= 0){ if(a[indexOfOriginal] == ' '){ b[indexOfNew--] = '0'; b[indexOfNew--] = '2'; b[indexOfNew--] = '%'; }else{ b[indexOfNew--] = a[indexOfOriginal]; } --indexOfOriginal; } } }