LeetCode算法题-Repeated String Match(Java实现)

这是悦乐书的第289次更新,第307篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第156题(顺位题号是686)。给定两个字符串A和B,找到A必须重复的最小次数,使得B是它的子字符串。 如果没有这样的解决方案,返回-1。例如:

输入:A =“abcd”,B =“cdabcdab”。
输出:3
说明:因为重复A三次(“abcdabcdabcd”),B是它的子串; 和B不是A重复两次的子串(“abcdabcd”)。

注意:A和B的长度在1到10000之间。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

特殊情况:如果B的长度为0,直接返回0。

正常情况:使用循环,依次累加A,然后判断在累加后的字符串中是否存在字符串B,借助indexOf方法实现,同时统计累加的次数,如果能够找到,就返回最后的次数。但是有一种情况需要考虑,如果B根本就不是由A多次累加组成,那么循环就容易变成死循环,所以,在循环外面我们取得A和B的长度之商,如果count比商要大2,就直接返回-1。

public int repeatedStringMatch(String A, String B) {if (B.length() == 0) {return 0;}int len = B.length()/A.length();int count = 1;String C = A;while (C.indexOf(B) < 0) {C += A;count++;if (count-len > 2) {return -1;}}return count;
}


03 第二种解法

在第一种解法的基础上,我们还可以再优化下。依旧使用循环,只要A的长度小于B的长度,就累加一次A,并记数,然后开始判断累加后的A与B是否存在B是A的子串的关系。如果在A中能够直接找到B,就返回count;如果需要再累加一次A才能找到B,那么就返回count加1;如果前面两种情况都不符合,就返回-1。

public int repeatedStringMatch(String A, String B) {int count = 1;StringBuilder sb = new StringBuilder(A);while (sb.length() < B.length()) {sb.append(A);count++;}if (sb.indexOf(B) >= 0) {return count;}if (sb.append(A).indexOf(B) >= 0) {return count+1;}return -1;
}


04 小结

算法专题目前已日更超过四个月,算法题文章157+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

转载于:https://www.cnblogs.com/xiaochuan94/p/10611991.html

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

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

相关文章

php

●转载于:https://www.cnblogs.com/volcanorao/p/8678104.html

Vs快捷键设置(可搭配Vim使用)

设置方式: 通过在Vs菜单栏的工具->选项->环境->键盘。 常用快捷键: 推荐键位编辑.转到定义Alt G切换标题代码文件Alt Q查看.向前导航Alt D查看.向后导航Alt A调试.调用堆栈Alt 7调试.监视1Alt 8调试.内存1Alt 9查看.查找符号结果Alt 1查看.错误列表Alt …

虚拟机windows7安装启动MYSQL5.7

一.环境 环境&#xff1a;虚拟机VMVare 系统&#xff1a;windows7旗舰版 MYSQL版本&#xff1a;mysql5.7.25 二.具体步骤 1.首先下载安装mysql5.7.25&#xff0c;这里用的是安装版的mysql&#xff0c;网上大多数都是推荐去官网下载&#xff0c;这里推荐的是清华大学开源镜像站…

故障转移架构的本质:数据中心的基础设施过剩

数据中心构成了全球互联基础设施的核心&#xff0c;我们称之为“云”。从根本上讲&#xff0c;云计算指的是基础设施从桌面计算&#xff08;文件和应用程序存储在计算机的本地硬盘上&#xff09;到在线计算&#xff08;文件和应用程序存储在可通过互联网远程访问的数据中心中&a…

CentOS启动Tomcat巨慢

在本地开发环境&#xff0c;应用正常启动。 在CentOS测试环境&#xff0c;应用启动速度也是正常的。 但是在阿里云的生产环境&#xff0c;tomcat启动超级慢&#xff0c;并且在最终打印出来以下内容&#xff1a; org.apache.catalina.util.SessionIdGenerator createSecureRando…

Oracle 存储过程

什么是存储过程&#xff1f;存储过程是一种命名的PL/SQL程序块&#xff0c;它是由一些T-SQL语句组成的代码块&#xff0c;这些T-SQL语句代码像一个方法一样实现一些功能&#xff08;对单表或多表的增删改查&#xff09;&#xff0c;可以有参数、输入输出参数&#xff0c;通常没…

查看Oracle 版本信息

select * from v$version;转载于:https://www.cnblogs.com/hanje/p/10614555.html

ubuntu上安装docker

在Ubuntu16.04上安装Docker Docker是一个开源的容器引擎&#xff0c;它有助于更快地交付产品。Docker可将应用程序和基础设施层隔离&#xff0c;并且将基础设施当作程序一样进行管理。使用Docker&#xff0c;可以更快地打包&#xff0c;测试以及部署应用程序&#xff0c;并可以…

字符串问题之 在有序但含有空的数组中查找字符串

尽可能使用二分查找 假设在 left right 之间查找 关键是mid处理过程 导致 left 跟 right 的改变 控制去哪里寻找 分如下情况&#xff1a; 若 mid处 不为空&#xff0c;并且 此处就是 str 那么记下 mid &#xff0c;同时把right-1 &#xff08;往左寻找&#xff09; 若…

Python_48re模块的sub方法

sub是替换的功能 sub(模型&#xff0c;替换为的字符&#xff0c;目标原字符串&#xff0c;替换次数) import re yuanchuan1qaz2wsx3edc4rfv5tgb new_strre.sub(\d,INTNUM,yuanchuan,2) #若果没有2表示默认替换所有的 print (new_str) #输出结果为&#xff1a;INTNUMqazINTNUMw…

个人笔记-vuex

个人笔记-vuex 最近想要沉淀下自己的知识体系&#xff0c;以前光看不记&#xff0c;当时记得&#xff0c;过段时间记忆就模糊了&#xff0c;好脑子不如烂笔头&#xff0c;古人诚不欺我&#xff0c;所以现在决定给用自己的语言方式来给自己记个笔记。 vuex vuex 有什么好讲的呢&…

常用模块之hashlib,configparser,logging模块

常用模块二 hashlib模块 hashlib提供了常见的摘要算法&#xff0c;如md5和sha1等等。 那么什么是摘要算法呢?摘要算法又称为哈希算法、散列算法。它通过一个函数&#xff0c;把任意长度的数据转换为一个长度固定的数据串&#xff08;通常用16进制的字符串表示&#xff09;。 注…

iPhone屏幕各种尺寸分辨率(更新至XS)

iPhone屏幕各种尺寸分辨率&#xff08;更新至XS&#xff09; DeviceLogic PointLogic PixelSizeScaleiPhone 2G480 320480 3203.51xiPhone 3480 320480 3203.51xiPhone 3GS480 320480 3203.51xiPhone 4480 320960 6403.52xiPhone 4S480 320960 6403.52xiPhone 5568 …

浙江嘉兴徒步游

最近参加了一个徒步团&#xff0c;趁着周末时光&#xff0c;来了一场徒步旅游&#xff0c;不一样的体验图片发自简书App一开始进山探秘外蒲岛的路程&#xff0c;荒草丛生图片发自简书App树木郁郁葱葱&#xff0c;蓝天白云&#xff0c;一切都很没好图片发自简书App漫山遍野都开满…

ASP.NET Web API 2 过滤器

前言 我们知道 ASP.NET Web API 过滤器&#xff0c;也是属于消息处理机制中的一部分。正因如此&#xff0c;我们经常使用它来完成对请求的授权验证、参数验证&#xff0c;以及请求的 Log 记录&#xff0c;程序异常捕获等。 1. 常用的四大过滤器 ASP.NET Web API 2 中的所有…

java的ThreadLocal类的使用方法

java的ThreadLocal类的使用方法&#xff0c;ThreadLocal是一个支持泛型的类&#xff0c;用在多线程中用于防止并发冲突问题。比如以下的一个样例&#xff0c;就是用于线程添加1&#xff0c;可是相互不冲突 package com.test.threadlocal;import java.util.concurrent.ExecutorS…

为选择合适的ERP供应商,是否该发布需求建议书(RFP)?

全球有成百上千家企业资源规划 (ERP) 解决方案供应商。在开展挑选 ERP 供应商的项目时&#xff0c;不可能与所有这些供应商都进行接触。不断缩小这一领域供应商的范围&#xff0c;直到最终敲定最适合的入围名单&#xff08;通常被称为“最终候选人名单”&#xff09;是项目成功…

kettle插入更新流程

kettle转换步骤工作组件 这里有四个类构成了这个kettle 步骤/节点&#xff0c;每一个类都有其特定的目的及所扮演的角色。 TemplateStep: 步骤类实现了StepInteface接口&#xff0c;在转换运行时&#xff0c;它的实例将是数据实际处理的位置。每一个执行线程都表示一个此类的实…

打开mobilenet——ssd的demo.py显示这样的错误解决方法:Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.s

终于找到方法了&#xff1a; ubuntu14.04打开终端&#xff1a; conda install nomkl numpy scipy scikit-learn numexpr conda remove mkl mkl-service一切ok。。。。。

C++ class、struct区别

一、默认访问控制不同&#xff08;最主要&#xff09; struct默认为public&#xff0c;class默认为private。这个访问控制既是指成员的默认访问属性&#xff0c;又指继承时默认的继承属性。 二、定义template时不同 在模版中&#xff0c;类型参数前面可以使用class或typename&a…