java算法day8

    1. 实现 strStr()
  • 459.重复的子字符串

实现strStr()

可以说是暴力解。但是里面的处理比一开始自己写的冗余逻辑要好

class Solution {public int strStr(String haystack, String needle) {char[] strh = haystack.toCharArray();char[] strn = needle.toCharArray();//优化1.没必要全部扫描完。因为最后一部分如果没有子串长那没有比较的意义,所以用字符串的长度减子串的长度。//模拟:abcdef , cde//这里取不取等是要自己算一下的。上例看来,i=3是有意义的,所以取等for (int i = 0; i <= strh.length - strn.length; i++) {int j = 0;//这个条件优化,就是我当时没想到的一个思维,我直接在i的基础上开始用j逐渐+1就可以了。并且两个字符串比较的过程我也包含在里面。这里用while比用if更省事,这是我一开始也没想到的。while (j < strn.length && i + j < strh.length && strh[i + j] == strn[j]) {j++;}//如果这里判断通过了,说明找到子串了。if (j == strn.length) {return i;}}return -1;}
}

重复的子字符串

首先题意是:给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。
思路:看到这个话要这么想,如果一个字符串s包含一个重复的字串,那么说明我可以多次移位和换行该字符串,并使其与原始字符串匹配。一定要这么想,如果你想去挨个的枚举扫一遍,那我只能说是麻烦中的麻烦。
比如abcabc
移位一次cabcab
移位两次bcabca
移位三次abcabc
这就是发现的规律。
但是存在一个问题,这个移动的次数存在不确定。而且每次移动都要进行匹配是否是相同字符串,这里又有一部分开销。
所以有没有什么方法,能够把这些开销降下来。回答是有的,这也是这个题的解法。
解法
1.创建一个新的字符串,str。将s与自身拼接。即str=s+s。
2.然后从str中去掉第一个和最后一个字符,得到str.substring(1,str.length()-1)
3.最后,检查这个新的字符串是否包含原始的s。

核心思想
如果 s 由重复的子串构成,那么在 s + s 中,去掉首尾字符后,一定还能找到一个完整的 s
为什么这个方法有效?
如果 s 是由重复子串构成的,那么在 s + s 中,原来的 s 会出现至少两次(除了首尾各少一个字符的情况)。
去掉首尾字符后,如果原来的模式是重复的,那么仍然会保留至少一个完整的 s
如果 s 不是由重复子串构成的,那么在去掉首尾字符后的字符串中,就不可能找到一个完整的 s

时间和空间都是o(n)。与kmp时间量级是相同的,但是kmp效率要更高一点,因为他更简洁。

class Solution {public boolean repeatedSubstringPattern(String s) {String str = s + s;return str.substring(1,str.length()-1).contains(s);}
}

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

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

相关文章

Monaco 多行提示的实现方式

AI 代码助手最近太火爆&#xff0c;国内有模型厂商都有代码助手&#xff0c;代码助手是个比较典型的 AI 应用&#xff0c;主要看前端&#xff0c;后端的模型都差不多&#xff0c;国内外都有专门的代码模型。现在都是集中在 VSCode 和 Idea的插件&#xff0c;本文通过 Monaco 实…

uniapp实现光标闪烁(配合自己的键盘)

前言 因为公司业务需要&#xff0c;所以我们... 演示 其实就是Chat自动打字效果 代码 键盘请看这篇文件 <template> <view class"list"><view class"title"><text>手机号码</text></view><view class"ty…

CTFShow的RE题(四)

真的是签到 给的是无后缀的 zip 文件&#xff0c;解压发现需要密码&#xff0c;也没有提示&#xff0c;猜测可能是 zip 伪加密 &#xff08;走错厂了吧&#xff09; zip是否加密 首先就是看开头的6 &#xff0c;7byte&#xff0c;和中间 01 02 后的 5 &#xff0c;6byte 成功解…

Proxifier代理的其他妙用方法(内网渗透、反溯源、小程序公众号)

目录 配置说明 1. 通过Proxifier进行内网渗透 2. 通过Proxifier将VM虚拟机代理 3. 通过Proxifier进行小程序抓包 4. 补充 文章截取处 配置说明 配置其他的之前,要新增一个代理规则,如下: 127.0.0.1; ::1 让它 Direct (直接连接,即不走任何代理)即可 说明: ::1是I…

LabVIEW透视变换

透视变换概述源程序在www.bjcyck.com下载 透视变换是一种几何变换&#xff0c;用于对图像进行扭曲&#xff0c;使其看起来从不同角度拍摄。这在计算机视觉和图像处理领域非常重要&#xff0c;例如在投影校正和图像配准中。LabVIEW提供了强大的图像处理工具&#xff0c;利用其V…

南方CASS:地理信息系统的卓越之选

引言 作为一名长期从事地理信息系统&#xff08;GIS&#xff09;工作的专业人士&#xff0c;我对各类地理信息处理软件有着深入的了解和使用经验。其中&#xff0c;南方CASS&#xff08;南方测绘计算机辅助设计系统&#xff09;无疑是我最为推崇的一款软件。它不仅功能强大&am…

【大学生】如何写好技术博客?

我其实还是很羡慕&#xff0c;每天可以互动的&#xff0c;写博客的大学生们的。如果我当年也可以像你们一样&#xff0c;在校的时候也专心学习&#xff0c;也努力写博客&#xff0c;我想我也不至于整天沉迷于热血江湖和DNF&#xff0c;我也可以像你们一样优秀。 所以&#xff…

无人机群辅助边缘计算系统的任务卸载和资源分配联合优化

源自&#xff1a;系统工程与电子技术 作者&#xff1a;刘世豪 黄仰超 胡航 司江勃 韩蕙竹 安琪 注&#xff1a;若出现无法显示完全的情况&#xff0c;可 V 搜索“人工智能技术与咨询”查看完整文章 摘 要 为提升无人机群辅助边缘计算系统在负载不均衡场景下的性能, 构…

游戏行业网络安全:挑战、防御与实践

引言 随着游戏行业的迅猛发展&#xff0c;网络安全问题日益凸显&#xff0c;尤其是DDoS攻击、SQL注入、零日攻击等威胁&#xff0c;对游戏公司的运营安全和玩家体验造成了严重影响。本文将深入探讨游戏行业面临的网络安全挑战&#xff0c;并提出一系列实用的防御策略&#xff…

算法整理——【贪心算法练习(1)】

上一篇博客算法整理——【贪心算法简述】-CSDN博客&#xff0c;我们介绍了贪心算法的基础知识&#xff0c;现在我们要对此进行进一步练习。 一、跳跃游戏II 例题为45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09;&#xff0c;给定一个长度为 n 的 0 索引整数数组 nu…

maxwell启动报错:Could not find first log file name in binary log index file

出现该问题是因为&#xff1a;maxwell 读取的是 mysql 的 binlog 日志&#xff0c;而配置文件中的两个值与 binlog 的最新值没有保持一致导致 1. 切换到maxwell的库 show master status;记住图片中的 FIle 和 Position 2. 修改maxwell的配置 SELECT * from positions p ;将…

拥抱无限视野:WebKit 全屏API的沉浸式体验解析

拥抱无限视野&#xff1a;WebKit 全屏API的沉浸式体验解析 在当今追求极致用户体验的数字时代&#xff0c;全屏模式成为了增强用户沉浸感的关键功能。WebKit 作为众多现代浏览器的核心技术引擎&#xff0c;其对全屏API&#xff08;Fullscreen API&#xff09;的支持为用户提供…

Vue3 项目中 svg 图标的封装及使用

安装 npm install vite-plugin-svg-icons -D在 vite.config.ts 中配置插件&#xff1a; import { createSvgIconsPlugin} from vite-plugin-svg-icons; import path from path;plugins: [createSvgIconsPlugin({iconDirs: [path.resolve(process.cwd(), src/assets/icons)],s…

Java并发关键字

并发关键字 关键字: synchronized详解关键字: volatile详解关键字: final详解 # Synchronized可以作用在哪里? 对象锁方法锁类锁 # Synchronized本质上是通过什么保证线程安全的? 加锁和释放锁的原理 深入JVM看字节码&#xff0c;创建如下的代码&#xff1a; public cl…

探索TXE、TC、RXNE标志位在串口通信中的轮询与中断应用

浅谈一下STM32串口中断之TXE,TC,RXNE标志位 之前做一个项目&#xff0c;用到了串口中断&#xff0c;但是对TXE、TC和RXNE标志位的作用和使用方法不是很清楚&#xff0c;导致在调试过程中遇到了一些问题。通过查阅相关资料和实际操作&#xff0c;我对这三个标志位有了更深入的了…

【机器学习】——决策树模型

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

材料科学SCI期刊,IF=6+,2个月录用,审稿速度非常快

一、期刊名称 Journal of Materials Research and Technology 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;材料科学 影响因子&#xff1a;6.2 中科院分区&#xff1a;2区 三、期刊简介 《材料研究与技术杂志》为发表与材料加工、性能和性能相关的理论…

el-tree 获取当前勾选节点的选中状态以及选中值对象 触发check-change多次事件问题原因

1.需求 现在需要一个树状结构的资产树 但是现在需求是 获取当前选中的值的状态是选中还是取消选中 然后再用当前选中 or 取消选中的值 进行 选中 or 取消选中的操作 一开始使用的是 check-change 方法 接收参数如图 但是我勾选父节点 或者 子节点后 他会打印一堆数据 是因…

园区智慧能源可视化:智能监控与优化能源管理

通过图扑可视化技术&#xff0c;搭建智慧光伏园区&#xff0c;实时监控园区光伏系统的运行状态&#xff0c;分析数据并优化能源管理&#xff0c;提高发电效率和维护效率&#xff0c;助力园区实现绿色可持续发展。

记录Linux安装go环境的一个坑

首先下载Linux安装包&#xff0c;然后解压配置环境变量即可&#xff0c;参考官网。如下&#xff1a; rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz可以说是简单至极了&#xff0c;但就是这么简单的一件事&#xff0c;却有一个坑&#…