怎么做公司内部网站,小红书关键词排名优化,成都今天发生的重大新闻,php网站开发用什么ide学习交流加 个人qq#xff1a; 1126137994个人微信#xff1a; liu1126137994学习交流资源分享qq群#xff1a; 962535112 题目链接#xff1a; 替换空格 文章目录题目描述解题思路总结题目描述 请实现一个函数#xff0c;将一个字符串中的每个空格替换成“%20”。例如 1126137994个人微信 liu1126137994学习交流资源分享qq群 962535112 题目链接 替换空格 文章目录题目描述解题思路总结 题目描述 请实现一个函数将一个字符串中的每个空格替换成“%20”。例如当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 注意C解法中给定的字符串结尾后面还有一定的空间不然我们还得重新给它分配足够的内存空间才能将空格换成%20。在写题过程中我们需要判断替换后的字符串是否会超过给定的内存空间长度超过了就直接返回。Java解法需要自己重新分配内存空间。 解题思路 O(n2)的思路就不写了直接就是从前开始遍历遇到空格就将后面所有剩余的字符串往后移动两个位置然后前面的空格后面就多了两个空位置写上%20即可。 O(n)的解法 这种题型要很容易想到从后往前扫描字符串。我们可以这样先计算出该字符串有几个空格然后算出替换后的字符串一共需要多少空间的长度。我们从字符串的后面开始准备复制和替换。可以看以下图示过程 其中p2是指向替换后字符串的结尾处应该在哪里p1是指向替换前字符串的结尾处。 我们从字符串的后面开始复制和替换当p1指向的是字符则将字符复制给p2位置。同时p1和p2同时向前移动。当p1遇到空格则p2处赋值字符’0’p2再向前移动一格p2处赋值字符’2’p2再向前移动一格p2处赋值字符’%’。然后p1和p2再同时向前移动一格。以此类推最终将所有空格替换完成。 java代码
public class Solution {public String replaceSpace(StringBuffer str) {int knum0;/*计算空格的数量与字符串的长度*/for(int i0;istr.length();i){if(str.charAt(i) )knum;}/* 替换空格后的字符串的长度 */int newlenstr.length()2*knum;int p1str.length()-1,p2newlen-1;str.setLength(newlen);while(p10 p2p1){sif(str.charAt(p1) ){str.setCharAt(p2--, 0);str.setCharAt(p2--, 2);str.setCharAt(p2--, %);--p1;}else{str.setCharAt(p2--, str.charAt(p1--));}}return str.toString();}
}C代码
class Solution {
public:void replaceSpace(char *str,int length) {int strlen0,knum0,i0;/*计算空格的数量与字符串的长度*/while(str[i]!\0){strlen;if(str[i] ) knum;i;}/* 替换空格后的字符串的长度 */int newlenstrlen2*knum;/* 如果替换后的长度超过了给出的固定长度则返回 */if(newlenlength)return;int p1strlen,p2newlen;while(p10 p2p1){if(str[p1] ){str[p2--]0;str[p2--]2;str[p2--]%;--p1;}else{str[p2--]str[p1--];}}}
};总结
遇到这种字符串替换的问题如果时间复杂度达到O(n2),则考虑从后往前替换。同时注意要将复制的过程用图示画出来才不会导致编程出错。
探讨学习加 qq1126137994 微信liu1126137994