剑指offer_数组---替换空格

简介: 剑指offer_数组---替换空格

题目描述

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

解题思路

1,使用stringBuffer辅助解决

2,不使用辅助类,字符替换解决

代码实现

/**
 * 
 */
package 字符串;
/**
 * <p>
 * Title:ReplaceSpace
 * </p>
 * <p>
 * Description:
 * </p>
 * 
 * @author 田茂林
 * @data 2017年8月23日 下午8:14:37
 */
public class ReplaceSpace {
    // ============================================================使用辅助的StringBuffer
    public String replaceSpace(StringBuffer str) {
        char[] strs = str.toString().toCharArray();
        StringBuffer s = new StringBuffer();
        for (int i = 0; i < strs.length; i++) {
            if (strs[i] != ' ')
                s.append(strs[i]);
            else {
                s.append("%20");
            }
        }
        return s.toString();
    }
    // ============================================================不使用辅助方案
    public String replaceSpaceSuper(StringBuffer str) {
        char[] strs = str.toString().toCharArray();
        int count = 0;
        // 统计出所有空格个数
        for (int i = 0; i < strs.length; i++) {
            if (strs[i] == ' ') {
                count++;
            }
        }
        //获取新字符串数组总长度
        int len = 2 * count + strs.length;
        char[] newstrs = new char[len];
        int i = 0;
        int j = 0;
        //遇到空格就把字符替换进去
        while (i < len && j < strs.length) {
            if (strs[j] == ' ') {
                newstrs[i++] = '%';
                newstrs[i++] = '2';
                newstrs[i++] = '0';
                j++;
            }else{
                newstrs[i++] = strs[j++];
            }
        }
        String s = new String(newstrs);
        return s;
    }
    public static void main(String[] args) {
        ReplaceSpace r = new ReplaceSpace();
        StringBuffer str = new StringBuffer("We Are Happy");
        System.out.println(r.replaceSpace(str));
        System.out.println(r.replaceSpaceSuper(str));
    }
}


相关文章
|
6月前
|
算法
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
|
6月前
|
Java
每日一题《剑指offer》数组篇之数组中重复的数字
每日一题《剑指offer》数组篇之数组中重复的数字
55 0
每日一题《剑指offer》数组篇之数组中重复的数字
|
6月前
|
Java
每日一题《剑指offer》数组篇之数组中只出现一次的两个数字
每日一题《剑指offer》数组篇之数组中只出现一次的两个数字
34 0
每日一题《剑指offer》数组篇之数组中只出现一次的两个数字
|
6月前
|
Java
每日一题《剑指offer》字符串篇之字符串的排列
每日一题《剑指offer》字符串篇之字符串的排列
78 0
每日一题《剑指offer》字符串篇之字符串的排列
【剑指offer】-数组中只出现一次的数字-35/67
【剑指offer】-数组中只出现一次的数字-35/67
|
6月前
|
Java
每日一题《剑指offer》数组篇之二维数组中的查找
每日一题《剑指offer》数组篇之二维数组中的查找
53 0
|
6月前
剑指Offer LeetCode 面试题50. 第一个只出现一次的字符
剑指Offer LeetCode 面试题50. 第一个只出现一次的字符
34 0
|
6月前
剑指Offer LeetCode 面试题53 - I. 在排序数组中查找数字 I
剑指Offer LeetCode 面试题53 - I. 在排序数组中查找数字 I
32 0
剑指offer_字符串---左旋转字符串
剑指offer_字符串---左旋转字符串
47 0
剑指offer_数组---数组中的逆序对
剑指offer_数组---数组中的逆序对
47 0