天天看点

剑指offer - 面试题4:替换空格

问题导读:

输入一个带有空格的字符串,将字符串中的空格替换为 20%

代码:

import java.util.Scanner;

public class interview_4 {
    private static int counter = 0;
    private static char []ch = new char[32];

    public static void main(String []args) {
        Scanner cin = new Scanner(System.in);
        /*
         *先用scanner 读取字符串,在存到char数组中
         */
        String str = cin.nextLine();
        for(int j = 0; j < str.length(); j++) {
            ch[j] = str.charAt(j);
        }
        //得到有效字符串长度和空格数量
        int lengthOfOriginal = 0;
        int i = 0;
        while(ch[i] != 0) {
            lengthOfOriginal++;
            if(ch[i] == ' ') {
                counter++;
            }
            i++;
        } 
        /*
         * 定义两个指针,分别指向新字符串尾部和原始字符串尾部
         * 从后向前替换
         */
        int indexOfOriginal = lengthOfOriginal;
        int newLength = counter*2 + lengthOfOriginal; 
        int indexOfNew = newLength;
        while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal) {
            if(ch[indexOfOriginal] != ' ') {
                ch[indexOfNew--] = ch[indexOfOriginal--];
            } else {
                ch[indexOfNew--] = '%';
                ch[indexOfNew--] = '0';
                ch[indexOfNew--] = '2';
                indexOfOriginal--;
            }
        }
        for(int j = 0; j < newLength; j++) {
            System.out.print(ch[j]);
        }
    }
}      

测试:

peerslee@peerslee-ubuntu:~/ws/java/offer/4$ java interview_4 
Gun N Rose !
Gun20%N20%Rose20%!
peerslee@peerslee-ubuntu:~/ws/java/offer/4$ java interview_4 
Hello PeersLee!
Hello20%PeersLee!
peerslee@peerslee-ubuntu:~/ws/java/offer/4$ java interview_4 
Offer
Offer
peerslee@peerslee-ubuntu:~/ws/java/offer/4$