剑指Offer(牛客网)-替换空格

2023-11-12

题目来源:

https://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=11155&tPage=1&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking

题目描述:

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

代码如下:

方法一:使用额外空间进行字符串追加

public class Solution {
    public String replaceSpace(StringBuffer str) {
        StringBuffer sb = new StringBuffer();
        char[] charArr = str.toString().toCharArray();
        for (int i = 0; i < charArr.length; i++) {
            if (charArr[i] == ' ') {
                sb.append("%20");
            } else {
                sb.append(charArr[i]);
            }
        }
        return new String(sb);
    }
}

方法二:
  在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。
  从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下
  从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。

public class Solution {
    public String replaceSpace(StringBuffer str) {
        int spacenum = 0;//spacenum为计算空格数
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == ' ')
                spacenum++;
        }
        int indexold = str.length() - 1; 
        int newlength = str.length() + spacenum * 2;//计算空格转换成%20之后的str长度
        int indexnew = newlength - 1;
        str.setLength(newlength);//使str的长度扩大到转换成%20之后的长度,防止下标越界
        for (; indexold >= 0 && indexold < newlength; --indexold) {
            if (str.charAt(indexold) == ' ') {  //
                str.setCharAt(indexnew--, '0');
                str.setCharAt(indexnew--, '2');
                str.setCharAt(indexnew--, '%');
            } else {
                str.setCharAt(indexnew--, str.charAt(indexold));
            }
        }
        return str.toString();
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指Offer(牛客网)-替换空格 的相关文章

  • Acwing-对称的二叉树

    除了根节点都有一个性质 自己对应的节点是相同的 并且左右儿子 左右和右左分别对称 即根节点的左右两棵子树 每一棵都是左右对称的 Definition for a binary tree node struct TreeNode int va
  • 树04--从上往下打印二叉树

    树04 从上往下打印二叉树 jz22 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 从上往下打印出二叉树的每个节点 同层节点从左至右打印 测试用例 输入 5 4 3 2 1 输出 5 4 3 2 1 解析 参考答案 解析 从
  • 剑指Offer:(数组)数组中出现次数超过一半的数字

    数组中出现次数超过一半的数字 一 题目 数组中有一个数字出现的次数超过数组长度的一半 请找出这个数字 例如输入一个长度为9的数组 1 2 3 2 2 2 5 4 2 由于数字2在数组中出现了5次 超过数组长度的一半 因此输出2 如果不存在则
  • 剑指Offer 04. 二维数组中的查找

    原题链接 思路 题目中说 每一行都是 从左向右递增的 在一个递增的序列中 查找某个数是否是存在的 二分即可 注意对边界进行判断 时间复杂度 O nlogn 代码 class Solution public boolean check int
  • 剑指offer_第8题_跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶 也可以跳上2级 求该青蛙跳上一个n级的台阶总共有多少种跳法 先后次序不同算不同的结果 理解 完全蒙啊 那我们就用特例先分析一下 如果有1级台阶 那有1种 如果有2级台阶 那有2种 如果有3级台阶 那一
  • 剑指offer_第20题_包含min函数的栈_Python

    题目描述 定义栈的数据结构 并在该类型中实现一个能够得到栈中所含最小元素的min函数 时间复杂度应为O 1 理解 什么是栈 算法复杂度 解题思路 思路1 class Solution def init self self stack sel
  • 最大连续子数组和

    最大连续子数组和 动态规划 迭代求出以i结尾的最大连续和 i 1结尾的最大连续和时和前一位的状态有关 列出递推式即可求解 class Solution public int FindGreatestSumOfSubArray vector
  • leetcode-找出数组中的重复数字

    我们让最终的nums序列其索引号与数值相等 即0号索引位置上的数值是0 1号索引位置上的数值是1 当前nums i 没有放到正确的坑上 并且那个正确的坑上的数与那个坑是不匹配的 那么就要不停地交换 交换到不能交换的时候 就要判断一下 是不是
  • 华为OD流程走完了

    我机试题地址 传送门 huaweiOD机试题 机试过了后 华为上海部HR一面 耗时30分钟左右 问了些家庭 个人工作经历 包括结婚否 为什么辞职之类的 技术二面 同样 自我介绍结束后 问了些项目相关的细节 该环节完后 面试官共享其试题 限时
  • JZ15 二进制中1的个数

    输入一个整数 n 输出该数32位二进制表示中1的个数 其中负数用补码表示 数据范围 2 31 lt n lt 2 31 1 231 lt n lt 231 1 即范围为 2147483648 lt n lt 2147483647 21474
  • 剑指offer--顺时针打印矩阵

    题目描述 输入一个矩阵 按照从外向里以顺时针的顺序依次打印出每一个数字 例如 如果输入如下矩阵 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1 2 3 4 8 12 16 15 14 13
  • 【剑指Offer】(字符串)左旋转字符串(翻转操作)

    题目链接 https www nowcoder com practice 12d959b108cb42b1ab72cef4d36af5ec tpId 13 tqId 11196 tPage 1 rp 1 ru ta coding inter
  • 剑指 Offer 28. 对称的二叉树 -- 递归

    0 题目描述 leetcode原题链接 剑指 Offer 28 对称的二叉树 1 递归解法 对称二叉树定义 对于树中 任意两个对称节点 L L L 和 R R R 一定有
  • 剑指 Offer 25. 合并两个排序的链表(java+python)

    输入两个递增排序的链表 合并这两个链表并使新链表中的节点仍然是递增排序的 示例1 输入 1 gt 2 gt 4 1 gt 3 gt 4 输出 1 gt 1 gt 2 gt 3 gt 4 gt 4 限制 0 lt 链表长度 lt 1000 思
  • LeetCode-链表中倒数第k个节点

    单链表只能从前往后遍历 所以 我们可以先计算出链表长度 倒数第k个节点相当于正数第n k 1个节点 然后我们再从头往后找 找到第n k 1个节点就可以了 while循环版 Definition for singly linked list
  • 剑指Offer 22. 链表中倒数第k个节点(Easy)/ 19. 删除链表的倒数第 N 个结点(Medium)/ ListNode调用!!!

    LeetCode 19 删除链表的倒数第 N 个结点 Medium 题目链接 题解 链表中倒数第 k 个节点 双指针 清晰图解 思路 代码 Definition for singly linked list class ListNode d
  • 剑指 Offer 56 - II. 数组中数字出现的次数 II(java+python)

    在一个数组 nums 中除一个数字只出现一次之外 其他数字都出现了三次 请找出那个只出现一次的数字 示例 1 输入 nums 3 4 3 3 输出 4 示例 2 输入 nums 9 1 7 9 7 9 7 输出 1 限制 1 lt nums
  • 把字符串转换成整数(字符串)

    题目描述 将一个字符串转换成一个整数 要求不能使用字符串转换整数的库函数 数值为0或者字符串不是一个合法的数值则返回0 输入描述 输入一个字符串 包括数字字母符号 可以为空 输出描述 如果是合法的数值表达则返回该数字 否则返回0 思路一 p
  • 剑指Offer 12—矩阵中的路径

    题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 如果 word 存在于网格中 返回 true 否则 返回 false 单词必须按照字母顺序 通过相邻的单元格内的字母构成 其中 相邻 单元格是那些水平相邻
  • 剑指Offer(牛客网)-数据流中的中位数

    题目来源 https www nowcoder com practice 9be0172896bd43948f8a32fb954e1be1 tpId 13 tqId 11216 tPage 4 rp 4 ru ta coding inter

随机推荐

  • 【RF时序预测】基于随机森林算法的时间序列预测附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 内容介绍 随机森林算法是一种集成学习方法 通过组合多个决策树来进行分类和回归 算法的原理如下
  • c++ 实现贪吃蛇(含技术难点解析和完整代码)

    文章目录 0 参考资料 1 技术难点 1 1 关于光标的移动 1 2 关于蛇的移动 1 2 1 从键盘上读取输入 1 2 2 蛇的移动 1 3 食物的生成 2 完整代码 0 参考资料 借鉴了这位大佬的博客及代码 在其基础上进行了修改 特此鸣
  • Antd Pro新增表格页面(二)

    前言 承接上一篇博客Ant Design Pro 新增一个表格页面 一 继续对index tsx进行修改 请求相关修改 复制过来的index tsx文件中的请求都是rule的增删查改 将其修改为前文已经写好的接口请求 import rule
  • VUE利用el-upload实现文件上传的功能,后端获取文件数据

    vue点击组件弹出窗口 span class tool btn i class table tool btn add icon i 批量新增 span 在方法中定义一个控制器 export default data return files
  • PTA---C++实现,定义抽象类Person、派生类Student和类Teacher

    问题描述 设计抽象类Person 派生出具体类 学生类Student和教师类Teacher 创建若干不同类对象后并在主方法中测试 数据成员定义 Person ID 姓名 生日 Student 专业 成绩 Teacher 职称 工资 带参构造
  • 贝叶斯定理及其Matlab程序设计

    目录 1 贝叶斯定理介绍 2 贝叶斯定理的Matlab代码实现 3 贝叶斯定理的C语言代码实现 4 贝叶斯定理的应用实例分析 1 贝叶斯定理介绍 贝叶斯定理 Bayes theorem 又称贝叶斯法则或贝氏定理 是概率论与统计学的基本定理之
  • OpenStack企业级实战

    一 环境初始化 1 CentOS7一键安装OpenStack 安装参考 Install RDO 前提条件 准备一个8g或16g内存的centos7 有一块网卡可以访问internet 磁盘 40G cpu分2 4线程 cpu要开启虚拟化 r
  • 串---KMP模式匹配算法之获取next数组

    一 获取模式串T的next数组值 1 回顾 我们所知道的KMP算法next数组的作用 next j 表示当前模式串T的j下标对目标串S的i值失配时 我们应该使用模式串的下标为next j 接着去和目标串失配的i值进行匹配 而KMP算法的ne
  • __attribute__((visibility("default")))

    设置符号可见性 vis c include
  • python创建可以迭代的类

    python中可以使用 for in 进行遍历 迭代 的数据类型 都是可迭代的对象 如 列表 字符串 字典 元组 都是可迭代的 Iterable 而浮点数 整型 布尔值都是不可迭代 for i in 1 2 3 4 print i for
  • NIO效率高的原理之零拷贝与直接内存映射

    前言 在笔者上一篇博客 详解了NIO 并总结NIO相比BIO的效率要高的三个原因 点击查看 这篇博客将针对第三个原因 进行更详细的讲解 首先澄清 零拷贝与内存直接映射并不是Java中独有的概念 并且这两个技术并不是等价的 零拷贝 零拷贝是指
  • python循环经典例题_Python学习之while循环练习题

    Python自近两年在国内兴起之后 引起了很多IT界小伙伴们的注意 开始学习Python的朋友逐渐增多 但是学习时发现 循环一处开始默默的考验逻辑思维了 还是再做几个练习题来梳理复习一下吧 1 使用while循环输出1 2 3 4 5 6
  • 51单片机汇编指令

    注 Rn与Ri中n 0 7 i 0 1 另外Cy是进位位 同时也是状态位 标志位 数据传送类指令 内部数据传送指令 助记符 作用 寻址方式 机器周期 字节数 MOV A Rn 将Rn的内容传送给A 寄存器 1 1 MOV A direct
  • java selenium (一) selenium 介绍

    Selenium 是目前用的最广泛的Web UI 自动化测试框架 本系列文章 将深入简出来讲解selenium 的用法 文章的末尾处 有整个系列的链接 阅读目录 selenium 的命名 selenium 的意思是 硒 有点QTP 杀手的意
  • java Canvas画图学习小结

    主函数 package paint import javax swing JFrame public class PaintMain JFrame jFrame public static void main String args TOD
  • 函数开始处的MOV EDI, EDI的作用收藏

    函数开始处的MOV EDI EDI的作用收藏 BYTE JMP 10 0x8b 0xFF 0x55 0x8b 0xEC 0xE9 0x00 0x40 0x00 0x00 0x00 Posted on 2009 04 01 11 19 S l
  • 数据增强方法--Cutout实现及结果分析

    数据增强方法 Cutout实现及结果分析 问题背景 Cutout简介 实现细节 实验设置 代码实现 结果展示 参考文献 问题背景 近年来 深度学习在计算机视觉领域取得了相当大的进展 并且在许多具有挑战性的任务中取得了最新的性能 如对象识别
  • 怎么样可以访问外部网络对于无公网IP的阿里云ESC服务器

    新购买了3台阿里云ECS服务器 centos7 和弹性公网IP EIP 虽然是从事计算机行业的人员但俺不是计算机网络从业人员 如何将这个祖宗运行起来 并且还要能方便远程维护 唉 其间的过程及酸爽各位看官尽情脑补吧 在此特别写几篇记录一下 算
  • 数据结构 每日一练 :选择 + 编程

    目录 选择 编程 选择 A a 0 2 1 B a 1 3 C a 4 2 0 D a 0 2 2 答案 D 解析 题目给的是一个3行4列的数组 而D选项是 a 0 2 2 a 0 4 相当于取得是第1行第5列的元素 越界了 需要注意的是数
  • 剑指Offer(牛客网)-替换空格

    题目来源 https www nowcoder com practice 4060ac7e3e404ad1a894ef3e17650423 tpId 13 tqId 11155 tPage 1 rp 1 ru 2Fta 2Fcoding i