《劍指》-替換空格-day02

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/nodjiang2014/article/details/78675943


   02.請實現一個函數,將一個字符串中的空格替換成"%20"。例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy。

 

解題思路:


   我們可以先遍歷一次字符串,這樣就能統計出字符串中空格的總數,並可以由此計算出替換之後的字符串長度。每替換一個空格,長度增加2,因此替換之後字符串的長度等於原來的長度加2乘以空格數目。我們還是以“We are Happy”爲例,“We are Happy”這個字符串有12個字符(C/C++應該13個字符,包括結尾符號'\0'),裏面有兩個空格,因此替換之後字符串長度應該是16。

   我們從字符串後面開始複製和替換。首先準備兩個指針,P1和P2。P1指向原始字符串的末尾。而P2指向替換之後的字符串末尾。接下來我們向前移動P1,逐個把他指向的字符複製到P2指向的位置,直到碰到第一個空格爲止。此時字符串包含(如下圖)灰色背景的區域是做了字符拷貝的區域。碰到第一個空格之後,把P1向前移動1格,在P2之前插入字符串"%20"。由"%20"的長度爲3,同時也要把P2向前移動3格如下圖(c)所示。

   我們接着向前複製,直到碰到第二個空格(如下圖(d)所示)。和上一次一樣,我們在再把P1向前移動1格,並把P2向前移動3格插入"%20"(如下圖(e)所示)。此時P1和P2指向同一位置,表明所有空格都已經替換完畢。


如圖所示:




java代碼:


public class Space {
	/**
	 * 請實現一個函數,將一個字符串中的空格替換成“%20”。 
	 * 例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy。
	 */

	public static String replaceSpace(StringBuilder str) {
		int spaceNum = 0; // 空格的數量
		for (int i = 0; i < str.length(); i++) {
			if (str.charAt(i) == ' ') {
				spaceNum++;
			}
		}
		int oldlength = str.length(); // 原字符串長度 
		int newlength = oldlength + spaceNum * 2; // 新字符串長度
		str.setLength(newlength);
		int oldindex = oldlength - 1;  // 原長度下標
		int newindex = newlength - 1;  // 新長度下標
		for (; oldindex >= 0; oldindex--) {
			if (str.charAt(oldindex) == ' ') {  
				str.setCharAt(newindex--, '0');
				str.setCharAt(newindex--, '2');
				str.setCharAt(newindex--, '%');
			} else {
				str.setCharAt(newindex--, str.charAt(oldindex));
			}
		}
		return str.toString();
	}
	public static void main(String[] args) {
		String str="We Are Happy";
		StringBuilder sb = new StringBuilder(str);
		String printstr=replaceSpace(sb);
		System.out.println(printstr);
	}
}

  ——《劍指offer》筆記,僅供自己日後複習查看


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章