剑指offer面试题4 替换空格

这篇具有很好参考价值的文章主要介绍了剑指offer面试题4 替换空格。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

考察点

考察数据结构字符串

知识点

不同于c语言,java语言有字符和字符串俩种数据类型,char类型(字符类型)是基本数据类型,string类型(字符串类型)是引用类型
java语言中的字符采用unicode编码在内存中用2个字节存储,因此一个英文字符或者中文字符的数据类型都可以是char。要显示字符对应的编码,直接将char类型赋值给int类型即可
java语言有专门的string类型,字符串在内存中的存储形式是一个字符数组,且最后一个字符不是以'\0'结尾。c语言没有专门的string类型,c语言中要想表示字符串的话就要么通过以'\0'结尾的字符数组要么通过字符指针
String类型的变量一旦创建,它引用的对象的内容就不能被修改了,重新赋值变量修改的其实是变量的指向
字符串连接:直接用+号
String testVariable = "hello " + "world";
字符串的遍历:
for (int i = 0;i < testVariable;i++)System.out.println(testVariable.charAt(i));
} 
字符串与字符数组的转换:
char[] testVariablea = testVariable.toCharArray();
String testVariableb = String.valueOf(testVariablea);

题目

分析:
关于字符串的考点无非就是字符串的遍历以及关于字符串类型本身提供的方法,后者其实主要考察你对语言本身是否足够熟悉,比如java语言中String类型支持哪些方法,这个太具体了,不太符合对抽象的数据结构和算法的考察标准。因此思路还是要往提升时间或者空间复杂度的点上靠。题目中要求把所有的空格换成"%20",从前往后依次遍历,每遇到一个空格该空格后面的字符都需要往后面腾挪,如果有n个空格的话时间复杂度也能达到O(n^2),该如何提升遍历的效率?这个时候一定要聚焦于数据结构自身的特性,观察字符串本身,遍历方式无非就是从前往后,或者从后往前,第一个方案不行那就考虑第二个方案,从后往前遍历一定要清楚字符串的总的大小,这样才能保证后面的字符不会被覆盖掉。如果我们能把字符串中空格的数目算出来,这样总的字符数目也就清楚了。
(如果直接用java语言提供的能力的话,String类型本身支持replaceAll方法)文章来源地址https://www.toymoban.com/news/detail-792487.html

import java.util.Arrays;

public class Four {
	public static void main(String[] args) {
		char chara[] = new char[0];
		replaceBlank(chara,0);
		System.out.println(Arrays.toString(chara));
		char charb[] = new char[5];
		charb[0] = 'a';
		charb[1] = 'b';
		charb[2] = 'c';
		charb[3] = ' ';
		replaceBlank(charb,4);
		System.out.println(new String(charb));
		char charc[] = new char[14];
		charc[0] = ' ';
		charc[1] = 'b';
		charc[2] = 'c';
		charc[4] = ' ';
		charc[5] = 'd';
		charc[6] = ' ';
		charc[7] = 'e';
		replaceBlank(charc,7);
		System.out.println(new String(charc));

	}
	public static void replaceBlank(char[] charString,int length) {
		if (charString == null || charString.length <= 0 || length <= 0) {
			return;
		}
		int blankCount = 0;
		for (int i = 0; i< length; i++) {
			if (charString[i] == ' ') {
				blankCount++;
			}
		}
		int newLength = length + blankCount * 2;
		if (newLength  > charString.length) {
			return;
		}
		int newLengthIdx = newLength -1;
		int lengthIdx = length - 1;
		while (lengthIdx >= 0 && newLengthIdx > lengthIdx) {
			if (charString[lengthIdx] == ' ') {
				charString[newLengthIdx--] = '0';
				charString[newLengthIdx--] = '2';
				charString[newLengthIdx--] = '%';
			} else {
				charString[newLengthIdx--] = charString[lengthIdx];
			}
			lengthIdx--;
		}
		return;
	}
}

到了这里,关于剑指offer面试题4 替换空格的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 剑指 Offer 05. 替换空格

    力扣 请实现一个函数,把字符串 s 中的每个空格替换成\\\"%20\\\"。 示例 1: 输入:s = \\\"We are happy.\\\" 输出:\\\"We%20are%20happy.\\\" 限制: 0 = s 的长度 = 10000  题解: 算法流程:     初始化一个字符串,记为 res ;     遍历字符串 s 中的每个字符 s[i]:         当 s[i] 为空格时:向 re

    2024年02月15日
    浏览(30)
  • 剑指Offer--05替换空格&&58左旋字符串

    题目是这样的 意思是将字符串s中的空格替换为字符串\\\"%20\\\",如果只是替换一个字符还好,可以在原数组直接替换,但是是将空格替换为字符串,所以再在原数组上替换,原数组原内容会被覆盖,且长度大小不够,所以此时要动态开辟一个字符数组,这个数组开多大?考虑最坏

    2024年02月06日
    浏览(36)
  • 【算法第六天7.19】反转字符串,反转字符串||,剑指 Offer 05. 替换空格,反转字符串的单词, 左旋转字符串

    ================================================ 思路 :以中间为分界线,左右两个边界交换字符,依次向里收缩 思路 : 首先:字符串转化为字符数组 char[] res = s.toCharArray(); 最后:将数组再转回字符串 return new String(res); 1、循环以2k为单位, 2、在这个2k长的数组中进行反转,需要有首

    2024年02月16日
    浏览(45)
  • 第8天-代码随想录刷题训练-字符串● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 05.替换空格 ● 151.翻转字符串里的单词 ● 剑指Offer58-II.左旋转字符串

    LeetCode链接 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 swap常见的两种交换形式 常见的值交换 通过位运算 LeetCode链接 给定一个

    2024年02月04日
    浏览(42)
  • 【leetcode】 剑指 Offer学习计划(java版本含注释)(下)

    该链接的学习计划如下: 剑指 Offer学习计划 上一版本的博文链接如下: 【leetcode】 剑指 Offer学习计划(java版本含注释)(上) 此贴两年前写的,一直在草稿箱里,今天释放出来,后续有时间完善下!(= - =) 题目: 输入一个非负整数数组,把数组里所有数字拼接起来排成

    2024年03月08日
    浏览(35)
  • 【LeetCode】剑指 Offer Ⅱ 第1章:整数(5道题) -- Java Version

    题库链接 :https://leetcode.cn/problem-list/e8X3pBZi/ 题目 解决方案 剑指 Offer II 001. 整数除法 快速除 ⭐ 剑指 Offer II 002. 二进制加法 模拟:StringBuilder ⭐ 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 动规:res[i] = res[i (i-1)] + 1 ⭐ 剑指 Offer II 004. 只出现一次的数字 位运算:按位取模

    2024年02月15日
    浏览(37)
  • 【LeetCode】剑指 Offer Ⅱ 第8章:树(12道题) -- Java Version

    题库链接 :https://leetcode.cn/problem-list/e8X3pBZi/ 类型 题目 解决方案 二叉树的深搜 剑指 Offer II 047. 二叉树剪枝 递归(深搜):二叉树的后序遍历 (⭐) 剑指 Offer II 048. 序列化和反序列化二叉树 递归(深搜):二叉树的前序遍历(⭐) 剑指 Offer II 049. 从根节点到叶节点的路径

    2024年02月06日
    浏览(35)
  • 【LeetCode】剑指 Offer Ⅱ 第5章:哈希表(6道题) -- Java Version

    题库链接 :https://leetcode.cn/problem-list/e8X3pBZi/ 类型 题目 解决方案 哈希表的设计 剑指 Offer II 030. 插入、删除和随机访问都是O(1) 的容器 HashMap + ArrayList ⭐ 剑指 Offer II 031. LRU 缓存 HashMap + 双向链表 ⭐ 哈希表的应用 剑指 Offer II 032. 有效的变位词 哈希表:数组模拟哈希表 ⭐ 剑指

    2024年02月10日
    浏览(34)
  • 【LeetCode】剑指 Offer 64. 求1+2+…+n p307 -- Java Version

    题目链接 :https://leetcode.cn/problems/qiu-12n-lcof/ 求 1+2+...+n ,要求不能使用 乘除法 、 for 、 while 、 if 、 else 、 switch 、 case 等及 条件判断语句 (A?B:C)。 【测试用例】: 【条件约束】: 时间复杂度 O(n),空间复杂度 O(n) 【 解题思路 】: 关于求 1+ 2 + 3 + … + n的解法有很

    2023年04月22日
    浏览(33)
  • 《剑指Offer》笔记&题解&思路&技巧&优化 Java版本——新版leetcode_Part_3

    当你踏入计算机科学的大门,或许会感到一片新奇而陌生的领域,尤其是对于那些非科班出身的学子而言。作为一位非科班研二学生,我深知学习的道路可能会充满挑战,让我们愿意迎接这段充满可能性的旅程。 最近,我开始了学习 《剑指Offer》 和Java编程的探索之旅。这不

    2024年02月22日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包