一、题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。注:用%20替换的原因,空格在ASCII码中的序号为32,用十六进制表示为0x20。二、思路分析参考剑指offer上的说明,需要考虑操作是原地(in place)操作还是新建字符串操作。以原地操作为例,首先考虑最直观的方法-从前往后依次替换。在第一个空格处,空格替换为%20,空格之后的字符全部右移三个位置。同理,第一次移动后,向后遍历,在第二个空格处继续将后边字符移动。从算法角度分析,设输入规模为n,我们需要循环遍历字符串中空格(循环中,判断是否为空的操作执行n次),在每个空格处,进行字符移动操作,每个字符的移动又相当于一次循环。因此,总的运行效率为$$O(n^2)$$直接遍历移动的方法效率太低,因此,考虑其他方法。方法1:考虑比Sting高效的字符串操作工具-StringBuffer,同样使用之前的直接遍历的方法,但是对比发现,不需要重复移动,每次判断执行一次操作,共执行n此判断,效率为$$O({n^2})$$方法2:不使用StringBuffer三、Java实现方法1源程序:package jz_offer;public class problem04 { public static String spaceReplace(String str) { StringBuffer newStr=new StringBuffer(); int length=str.length(); //特殊情况 if(str==null||length==0) return null; for(int i=0;i<length;i++) { if(str.charAt(i)==’ ‘) { newStr.append("%20"); }else { newStr.append(str.charAt(i)); } } return newStr.toString(); } public static void main(String[] args) { // TODO Auto-generated method stub //包含空格-:前-后-中-连续空格 String str1 = " Wearehappy"; String str2 = “Wearehappy “; String str3 = “We are happy”; String str4 = “We are happy “; //没有空格 String str5=“Wearehappy”; //特殊输入测试:只有连续空格、只有一个空格、是null指针、是空字符串 String str6=” “; String str7=” “; //String str8=null; //会出现NullPointerException(运行时异常) String str8=””; String[] strArray=new String[] {str1,str2,str3,str4,str5, str6,str7,str8}; for(int i=0;i<strArray.length;i++) { System.out.println(spaceReplace(strArray[i])); } }}