算法练习:将字符串中所有的空格替换为'%20'(只用基本数据结构)
生活随笔
收集整理的這篇文章主要介紹了
算法练习:将字符串中所有的空格替换为'%20'(只用基本数据结构)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
<!-- lang: java --> package codinginterview;/*** 寫一個函數,把字符串中所有的空格替換為%20 。* 分析:* 先遍歷一次字符串,得到空格個數,進而得到將空格轉換成%20后的串長度 (每個空格替換為%20需要增加2個字符,x個空格增加2x個字符)。* 然后從后向前依次對空格進行替換,非空格原樣拷貝。* 如果原串有足夠大的空間, 則替換過程直接在原串上進行, 因為從后向前替換的過程中,新串用到的空間一定是舊串不需要的空間;* 如果原串的空間不夠大,或是就直接是字符串長度,那么就新開一個串來保存替換后的結果.* @author mingdong.cheng**/ public class ReplaceStr {/*** 新開一個數組來保存替換后的結果* O(n)* @param s* @return*/public static String replace(String s) {if (s == null || s.length() == 0) return s;final char[] c = s.toCharArray();int len = c.length;int count = 0;for (int i=0;i<len;i++) {if (c[i]==' ') {++count;}}//新開一個數組來保存替換后的結果//每個空格替換為%20后需要增加2個字符,count個空格增加2*count個字符final char[] d = new char[len+2*count];int idx=0;for (int i=0;i<len;i++) {if (c[i]==' ') {d[idx]='%';d[idx+1]='2';d[idx+2]='0';idx += 3;} else {d[idx]=c[i];idx++;}}return String.valueOf(d);}public static String replace2(String s) {if (s == null || s.length() == 0) return s;int len=s.length();int count = 0;//統計空格個數for (int i=0;i<len;i++) {if (s.charAt(i)==' ') {++count;}}//將原字符串擴容for(int i=0;i<2*count;i++){s=s.concat("\0");}//擴容后,原串就會有足夠大的空間;替換可直接在原串上進行;//從后向前依次對空格進行替換,非空格原樣拷貝;//因為從后向前替換的過程中,新串用到的空間一定是舊串不需要的空間final char[] c = s.toCharArray();int idx=len-1+2*count;for (int i=len-1; i>=0; i--) {if (c[i] == ' ') {c[idx] = '0';c[idx-1] = '2';c[idx-2] = '%';idx -= 3;} else {c[idx] = c[i];idx--;}}return String.valueOf(c);}public static void main(String[] args) {String s = " i am danielcheng . i am coding ... ";System.out.println(replace(s));System.out.println(replace2(s));}}轉載于:https://my.oschina.net/mingdongcheng/blog/145209
總結
以上是生活随笔為你收集整理的算法练习:将字符串中所有的空格替换为'%20'(只用基本数据结构)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj 3131 双向搜索+hash判重
- 下一篇: Lync Server 2013:边缘服