JZ02-替换空格

替换空格

https://www.nowcoder.com/practice/0e26e5551f2b489b9f58bc83aa4b6c68?tpId=13&tqId=11155&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tab=answerKey

 /**
     * 解法三:从后往前复制
     * 分析:由于函数返回为void,说明此题不能另外开辟数组,需要in-place操作。我们知道字符串的遍历无非是从左到右和从右到左两种。
     * 1)如果从左到右,会发现如果遇到空格,会将原来的字符覆盖。于是,此方法不行。
     * 2)那么就考虑从右向左,遇到空格,就填充“20%“,否则将原字符移动应该呆的位置。
     */
    public static String replaceBlank3(StringBuffer input) {

        if (input == null || input.length() == 0) {
            return null;
        }

        int spaceNum = 0;
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) == ' ') {
                spaceNum++;
            }
        }

        int oldLength = input.length();
        int oldIndex = oldLength - 1;
        int newLength = oldLength + spaceNum * 2;
        int newIndex = newLength - 1;

        input.setLength(newLength);  //重新设置长度

        for (; oldIndex >= 0 && oldIndex <= newIndex; oldIndex--) {  //oldIndex <= newIndex 最后一个空格前的单词不用重新复制一遍
            if (input.charAt(oldIndex) == ' ') {
                input.setCharAt(newIndex--, '0');
                input.setCharAt(newIndex--, '2');
                input.setCharAt(newIndex--, '%');
            } else {
                input.setCharAt(newIndex--, input.charAt(oldIndex));
            }
        }
        return input.toString();
    }

全部评论

相关推荐

昨天 13:42
门头沟学院 Java
点赞 评论 收藏
分享
盖茨伯爵:一样兄弟,我从4月开始发到现在了,都三四百个了
无实习如何秋招上岸
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务