剑指 Offer 05. 替换空格(java双指针)

剑指 Offer 05. 替换空格(java双指针),第1张

一:题目

二:上码

class Solution {
    /**
        思路:1.双指针法进行解决
            2.我们先统计出空格的数量,然后再按空格数*2,扩充成字符串,加入到原来的字符串中
            3.然后我们定义两个指针  一个是原来数组长度的指针  一个是扩充完数组长度下标的指针
            4.当我们原来数组长度的指针遇见空格的时候,这时候,就开始添加 % 2 0
                遇见不到就正常赋值
            5.关于我们为什么是从字符串倒着顺序来的,因为这样的话,我们就不用移动大量的字符    
    */
 public String replaceSpace(String s) {
    
    if (s == null) return null;

    StringBuilder str = new StringBuilder();

    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) == ' ') {
            str.append("  ");//增加两个空格
        }
    }   

    int oldl = s.length()-1;
    s+=str;
    int newl = s.length()-1;
    char[] chars = s.toCharArray();//字符串转换成字符数组

    for (int i = oldl,j = newl; i < j; i--,j--) {
        if (chars[i] != ' ') {
           chars[j] = chars[i]; 
        } else {
            chars[j] = '0';
            chars[j-1] = '2';
            chars[j-2] = '%';
            j = j-2;
        }
    }
    
    return new String(chars);
	
	//错误用法
    // for (int i = oldl,j = newl; i < j; i--,j--) {
    //         if (s.charAt(i) != ' ') {
    //             s.charAt(j) = s.charAt(i);
    //         } else {
    //             s.charAt(j) = '0';
    //             s.charAt(j-1) = '2';
    //             s.charAt(j-2) = '%';
    //             j = j-2;
    //         }
    //     }

    // return s;
 }
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/757661.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-01
下一篇 2022-05-01

发表评论

登录后才能评论

评论列表(0条)

保存