《剑指offer》编程题java实现(二):替换空格

package com.nowcoder;
/**
 * 
 * @author sk
 * 描述:要向面试官问清楚,替换字符串,是在原来的字符串上做替换,还是新开辟一个字符串做替换!本例子是开辟新的内存空间
 * 从后向前复制和移动,时间复杂度为O(0)
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        String str="We Are Happy";      
        System.out.println(replaceSpace(new StringBuffer(str)));
    }
    public static String replaceSpace(StringBuffer str) {
        int preLength=str.length();
        int spaceNum=0;
        //首先计算空格数
        for(int i=0;iif (str.charAt(i)==' ') {
                spaceNum++;
            }
        }
        //得到变换后的长度
        int newLength=preLength+spaceNum*2;
        //设置索引长度
        int oldIndex=preLength-1;
        int newIndex=newLength-1;
        //开辟新的内存空间
        StringBuffer str1=new StringBuffer();
        str1.setLength(newLength);
        //从后向前逐渐复制,算法复杂度为O(0)
        for(int i=preLength-1;i>=0;i--) {
                if (str.charAt(i)!=' ') {
                    str1.setCharAt(newIndex, str.charAt(oldIndex));
                    oldIndex--;
                    newIndex--;
                }else {
                    str1.setCharAt(newIndex,'0');
                    newIndex--;
                    str1.setCharAt(newIndex,'2');
                    newIndex--;
                    str1.setCharAt(newIndex, '%');
                    oldIndex--;
                    newIndex--;
                }
            }
        return str1.toString();
    }
}

你可能感兴趣的:(剑指offer算法题)