栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Leetcode字符串-双指针】剑指 Offer 05. 替换空格(填充类题目好的解法!!)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Leetcode字符串-双指针】剑指 Offer 05. 替换空格(填充类题目好的解法!!)

文章目录
  • 剑指Offer-05
    • 1.问题描述
    • 2.解决方案
      • 解法一:从前往后遍历
      • 解法二:扩容加从后往前遍历双指针
        • 算法优点:
        • 代码实现:

剑指Offer-05 1.问题描述

2.解决方案 解法一:从前往后遍历

不用多说,思路很清晰,就是从前往后遍历,遇到空格,就整体后移然后填充"%20",但是时间复杂度就是O(n^2),因为每次添加元素都要将添加元素之后的所有元素向后移动,代码这里就不给出了!



解法二:扩容加从后往前遍历双指针 算法优点:

其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。
1.把这道题目做到极致,就不要只用额外的辅助空间了!首先扩充数组到每个空格替换成"%20"之后的大小。
2.然后从后向前替换空格,也就是双指针法,i指向新长度的末尾,j指向旧长度的末尾。
3.不用申请新数组。
4.从后向前填充元素,避免了从前先后填充元素要来的,每次添加元素都要将添加元素之后的所有元素向后移动,时间复杂度将为o(n)



代码实现:

先统计再扩充,扩充用到了resize(),然后从后往前填充!

class Solution {
public:
    string replaceSpace(string s) {
        //统计空格字符的数量
        int oldSize=s.size();
        int count=0;
        for (auto item: s) {
            if(item==' ') count++;
        }

        //扩充
        s.resize(s.size()+count*2);
        int newSize=s.size();

        //从后先前将空格替换为"%20"
        //...j(oldSize-1)...i(newSize-1)
        //j
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/305297.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号