Java习题中 反转字符串 替换空格 翻转字符串里的单词 kmp算法

关于 反转字符串
  • 空间问题:c++的字符串可以原地修改,Java和python语言的字符串不可以,需要额外空间。这里用到的额外空间是没关系的,不影响原地修改的做法。
s[i] ^= s[j];
s[j] ^= s[i];
s[i] ^= s[j];
  • 这段代码是用来交换数组s中第i个元素和第j个元素的值的。它使用了异或运算符(^),它的作用是对两个二进制数的每一位进行逻辑异或,即相同为0,不同为1。例如,5 ^ 3 = 6,因为5的二进制是101,3的二进制是011,异或后得到110,即6。

这段代码的原理是利用了异或运算的以下性质:

1、任何数和自己异或都等于0,即x ^ x = 0

2、任何数和0异或都等于自己,即x ^ 0 = x

3、异或运算满足交换律和结合律,即x ^ y = y ^ x,(x ^ y) ^ z = x ^ (y ^ z)

所以,当执行第一句s[i] ^= s[j]时,相当于把s[i]和s[j]的值异或后赋给s[i]。此时s[i]变成了原来s[i]和s[j]的值的异或结果。

当执行第二句s[j] ^= s[i]时,相当于把新的s[i]和原来的s[j]再次异或后赋给s[j]。由于异或运算满足交换律和结合律,所以这相当于把原来的s[i]和原来的s[j]两次异或后赋给了s[j]。根据性质1和2,我们知道这就相当于把原来的s[i]赋给了新的s[j]。此时实现了一半交换。

当执行第三句s[i] ^= s[j];时,相当于把新的sj和新的si再次异或后赋给新的 s[i].由于同样满足交换律和结合律,所以这相当于把原来两者三次异或后赋给了新 的 s [i].根据性质1 和2 ,我们知道这就相当于把原来 的 s [j ] 赋 给 了 新 的 s [i ].此时实现了完全交换。

关于 替换空格
  • 本题有同学采用先扩容三倍空间进行替换字符后,再生成一个结果字符串去返回,但是由于是 C++,最后再 char 数组转 string 的过程中出现了错误。C++用 char 数组转 string 一定要记得以 '\0' 结尾,否则就会报错,或者一开始就新建一个 string 而不是 char 数组也不失为一种选择。
关于 翻转字符串里的单词
  • 翻转单词这一题为什么会最后输出只有最后一个字母不对?
    输出:
    "blue is sky eht"
    预期结果
    "blue is sky the'
    最后一个单词判断逻辑跟前面不一样,因为不是空格结尾。所以特殊处理一下就好。或者预先直接在字符串后面加个空格

关于 kmp算法
  • “KMP算法 和 day10 安排的题目(kmp的一个应用),一刷 录友们 可以适当放过,或者了解一下 算法原理就行,毕竟比较难,等二刷的时候再重点啃
  • 发现很多小伙伴都无法理解kmp,  其实我一开始学的时候也理解不了, 主要是理解好next数组的创建和回退的过程!下标也有很多种写法,大家记住一种自己写的习惯的就好了。
  • 考虑到大多数小伙伴理解不了kmp,我自己其实说实话也经常会忘记kmp怎么写,但是能理解他的思想,所以真的不想学kmp的小伙伴我这边给一个字符串哈希算法的模板,也给出了证明,是我很早之前写的一篇博客,大家要是无法理解或者怎么都记不住的话直接背字符串哈希的模板简单理解一下也可以解决力扣上所有kmp的问题了哈 ,在最上面会给出字符串哈希的博客。
  • “最长相同前缀”是什么?“最长相同前缀”=“最长相同后缀”?
    就是最长相同前后缀中的 前缀和后缀部分。谈及相同 必须得有比较  单纯的说相同前缀不知所云 这两个名字是基于“最长相同前后缀”拆出来的  图里标注是为了明确前缀后缀是哪部分
  • "当 needle 是空字符串时,我们应当返回什么值呢? 这是一个在面试中很好的问题。 对于本题而言,当 needle 是空字符串时我们应当返回 0。这与C语言的 strstr0 以及 Java的 indexof0 定义相符"。 这里为什么要返回 0 呢
    这个很有意思  语言的设计哲学吧  认为空字符串是无处不在的  可以将任意字符串str看做是 "" + str。可以看stack overflow上的讨论  Java String.indexOf and empty Strings - Stack Overflow

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/775878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亮数据——让你的IP走出去,让价值返回来

亮数据——让你的IP走出去,让价值返回来 前言跨境电商最最最大的痛点——让IP走出去超级代理服务器加速网络免费的代理管理软件亮数据解决痛点亮数据优势介绍亮数据浏览器的使用示例总结 前言 当前社会信息的价值是不可想象的,今天在亮数据中看到了个【…

Ipython与Jupyter之间的关系

IPython 和 Jupyter 之间的关系可以从它们的历史和目标中得到很好的解释。IPython(Interactive Python)最初是由 Fernando Prez 于 2001 年创建的,旨在提升 Python 的交互式计算体验。它提供了一个强大的交互式 Python shell 和一个面向高效计…

Linux C++ 007-指针

Linux C 007-指针 本节关键字:Linux、C、指针、函数指针 相关库函数: 基本概念 指针的作用:可以通过指针间接访问内存。内存编号是从0开始记录的,一般用于十六进制数字表示,可以利用指针变量保存地址。 定义和使用…

『VUE』03. 模板语法 使用js与插入html(详细图文注释)

目录 vscode终端中创建项目什么是模板语法?模板语法--js"变量"用法模板语法--插入html总结 欢迎关注 『VUE』 专栏,持续更新中 欢迎关注 『VUE』 专栏,持续更新中 vscode终端中创建项目 回顾一遍前面的cmd. 首先在vscode中打开一个新的空文件…

SpringAOP+自定义注解实现限制接口访问频率,利用滑动窗口思想Redis的ZSet(附带整个Demo)

目录 1.创建切面 2.创建自定义注解 3.自定义异常类 4.全局异常捕获 5.Controller层 demo的地址,自行获取《《—————————————————————————— Spring Boot整合Aop面向切面编程实现权限校验,SpringAop自定义注解自定义异常全局…

WordPress分页函数function

1、可以通过下面的代码在编辑器上添加一个分页符按钮。 2、将下面的代码添加到当前主题functions.php即可。 3、代码如下: function mce_page_break($mce_buttons) { $pos array_search(wp_more, $mce_buttons, true); if ($pos ! false) { $buttons …

全球最强开源AI大模型来了!Databricks称DBRX吊打Llama 2和GPT-3.5

美国AI初创公司Databricks公布,在语言理解、编程和数学方面,其将开源的模型DBRX的测试得分均高于GPT-3.5、Mixtral、Meta的Llama 2-70B、马斯克旗下xAI的Grok-1。作为混合专家模型,DBRX的输出token速度高Llama 2一筹。 全球最强大的开源人工智…

车载以太网AVB交换机 gptp透明时钟 5口 全千兆 SW1500

全千兆车载以太网交换机 一、产品简要分析 5端口千兆车载以太网交换机,包含4个通道的1000BASE-T1接口使用罗森博格H-MTD和泰科MATEnet双接口,1个通道1000BASE-T标准以太网(RJ45接口),可以实现车载以太网多通道交换,千兆和百兆车载…

Docker搭建LNMP环境实战(06):Docker及Docker-compose常用命令

Docker搭建LNMP环境实战(06):Docker及Docker-compose常用命令 此处列举了docker及docker-compose的常用命令,一方面可以做个了解,另一方面可以在需要的时候进行查阅。不一定要强行记忆,用多了就熟悉了。 1、…

Golang hash/crc32 库实战指南:从基础到优化

Golang hash/crc32 库实战指南:从基础到优化 引言理解CRC32hash/crc32库概览实战技巧数据校验性能优化多线程应用 错误处理与调试错误处理调试 实际案例分析结论 总结重点回顾 引言 在现代软件开发中,数据的完整性和安全性至关重要。无论是数据库存储、…

python的os模块的getcwd()、listdir()、splitext()、chdir()、rename()方法

getcwd() 获得当前路径 例子: import ospath os.getcwd()print(path) 结果: D:\pythonProject\test listdir(path) 返回列表,路径下所有文件和子文件夹 例子: import osfile_list os.listdir(rD:\TEST)print(file_list) s…

Vue-vue3

一、Vue3简介二、Vue3有那些优化性能的提升源码升级拥抱TypeScript新的特性 三、创建Vue3.0工程四、Vue3工程结构(使用cli创建的vue3)五、常用的Composition API(组合式API)setupsetup的两个注意点 ref函数reactive函数Vue3.0中的…

PCL 彩色点云RGB转灰度并显示

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、原理概述 不同要素之间的灰度差异较为明显。点云灰度值与RGB属性的关系为:

=> ERROR [internal] load metadata for docker.io/library/java:8-alpine问题解决

[internal] load metadata for docker.io/library/java:8-alpine问题解决 这里上面说加载来自docker.io的数据出错,要注意:docker.io/library/java:8-alpine这个地址并不能访问,也ping不通,只是docker这里是这么写的而已。 分析 …

MySQL高阶SQL语句(二)

文章目录 MySQL高阶SQL语句(二)一、MySQL常用查询1、子查询1.1 语法1.1.1 结合select语句查询1.1.2 结合insert语句查询1.1.3 结合update语句查询1.1.4 结合delete语句查询1.1.5 在in前面添加not1.1.6 exists关键字 2、别名 二、MySQL视图1、视图介绍1.1…

《科学技术创新》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答: 问:《科学技术创新》期刊是哪个级别? 答:省级 主管单位:黑龙江省科学技术协会 主办单位:黑龙江省科普事业中心 问:《科学技术创新》期刊影响因子? 答:(2…

bugku-web-Flask_FileUpload

查看页面源码 这里提示给他一个文件,它将返回一个python运行结果给我,并且提示只能上传jpg和png文件 传递一个图片 查看源码 传递一个非图片 将源码写入新建的txt文件中 print(hello world) 将文件后缀改为jpg 上传 上传成功 查看源码 得到运行结果 我…

展示大屏-24小时天气预报

一、项目说明 展示大屏显示未来一周天气和24小时天气详情。 二、技术工具 1.语言&框架:java、springboot 2.UI界面:jQuery、HTML、CSS、 VUE 3.开发工具:IntelliJ IDEA、Eclipse 三、实现步骤 后端步骤 1.调取免费或收费的API接口。 …

JAVA面试大全之并发篇

目录 1、并发基础 1.1、多线程的出现是要解决什么问题的? 本质什么? 1.2、Java是怎么解决并发问题的? 1.3、线程安全有哪些实现思路? 1.4、如何理解并发和并行的区别? 1.5、线程有哪几种状态? 分别说明从一种状态到另一种状态转变有哪些方式? 1.6、通常线程有哪几…

mysql数据库高级面试题-2024

数据库三大范式是什么 第一范式:列不可再分 第二范式:行可以唯一区分,主键约束,要求表中的每个非主键列完全依赖于主键列 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范式是一级一级…