【劍指offer】【Java】5.替換空格【字符串】

轉自牛客網【叫我皮卡丘】5.替換空格
牛客網【CyC2018】三的來源

題目描述
請實現一個函數,將一個字符串中的每個空格替換成“%20”。例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy。

一、調用自帶函數

  1. 代碼
public class Solution{
	public String replaceSpace(StringBuffer str){
		return str.toString().replace(" ", "%20");
	}
}

二、用新的數組存

  1. 分析
    當遇到 " ",就追加 “%20”,否則遇到什麼追加什麼

  2. 代碼

import java.util.*;
public class Solution{
	public String replaceSpace(StringBuffer str){
		StringBuilder sb = new StringBuilder();
		for(int i=0; i<str.length(); i++){
			char c = str.charAt(i);
			if(c==' '){
				sb.append("%20");
			}else{
				sb.append(c);
			}
		}
		return sb.toString();
	}
}

三、

  1. 分析
    在字符串尾部填充任意字符,使得字符串的長度等於替換之後的長度。因爲一個空格要替換成三個字符(%20),因此當遍歷到一個空格時,需要在尾部填充兩個任意字符。
    令 P1 指向字符串原來的末尾位置,P2 指向字符串現在的末尾位置。P1 和 P2 從後向前遍歷,當 P1 遍歷到一個空格時,就需要令 P2 指向的位置依次填充 02%(注意是逆序的),否則就填充上 P1 指向字符的值。
    從後向前遍是爲了在改變 P2 所指向的內容時,不會影響到 P1 遍歷原來字符串的內容。

  2. 代碼

public class Solution{
	public String replaceSpace(StringBuffer str){
		int P1 = str.length() - 1;
		for(int i=0; i<=P1; i++){
			if(str.charAt(i)==' ')
				str.append("  ");//注意這裏是追加兩個空格,因爲已經有了一個了
		}
		
		int P2 = str.length() - 1; 
		while(P1>=0 && P2>P1){
			char c = str.charAt(P1--);
			if(c == ' '){
				str.setCharAt(P2--,'0');
				str.setCharAt(P2--,'2');
				str.setCharAt(P2--,'%');
			}else{
				str.setCharAt(P2--,c);
			}
		}
		return str.toString();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章