leetcode 686. Repeated String Match | 686. 重复叠加字符串匹配(KMP)
题目
https://leetcode.com/problems/repeated-string-match/
题解
套了 KMP 模板,O(n) 复杂度。分析如下。
class Solution {public int repeatedStringMatch(String a, String b) {int repeatedTimes = Math.max((int) Math.ceil((float) 2 * b.length() / a.length()), 2);int index = indexOf(a.repeat(repeatedTimes), b);if (index == -1) return -1;return (int) Math.ceil((float) (index + b.length()) / a.length());}// KMP, find index of s2 from s1public static int indexOf(String s1, String s2) {if (s1 == null || s2 == null || s2.length() < 1 || s1.length() < s2.length()) {return -1;}char[] str1 = s1.toCharArray();char[] str2 = s2.toCharArray();int x = 0;int y = 0;// O(M) m <= nint[] next = nextArray(str2);// O(N)while (x < str1.length && y < str2.length) {if (str1[x] == str2[y]) {x++;y++;} else if (next[y] == -1) { // y == 0x++;} else {y = next[y];}}return y == str2.length ? x - y : -1;}public static int[] nextArray(char[] str2) {if (str2.length == 1) {return new int[]{-1};}int[] next = new int[str2.length];next[0] = -1;next[1] = 0;int i = 2; // 目前在哪个位置上求next数组的值int cn = 0; // 当前是哪个位置的值再和i-1位置的字符比较while (i < next.length) {if (str2[i - 1] == str2[cn]) { // 配成功的时候next[i++] = ++cn;} else if (cn > 0) {cn = next[cn];} else {next[i++] = 0;}}return next;}
}
leetcode 686. Repeated String Match | 686. 重复叠加字符串匹配(KMP)相关推荐
- 【快乐水题】686. 重复叠加字符串匹配
原题: 力扣链接:686. 重复叠加字符串匹配 题目简述: 给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1. 注 ...
- 从 重复叠加字符串匹配 看Java String源码中的contains方法
原题:重复叠加字符串匹配 解题思路已经写在代码中了: class Solution {public:bool contain(string &a, string &b, long lo ...
- LeetCode 686. 重复叠加字符串匹配
1.题目 给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1. 举个例子,A = "abcd",B = & ...
- leetcode(力扣) 686. 重复叠加字符串匹配
文章目录 题目描述 思路分析 完整代码 题目描述 给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1. 注意:字符串 ...
- Q686 重复叠加字符串匹配
给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1. 举个例子,A = "abcd",B = " ...
- LeetCode686——重复叠加字符串匹配
题目 给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1. 注意:字符串 "abc" 重复叠加 ...
- C#LeetCode刷题之#686-重复叠加字符串匹配(Repeated String Match)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3963 访问. 给定两个字符串 A 和 B, 寻找重复叠加字符串A ...
- LeetCode686 Repeated String Match(字符串匹配)
给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1. 注意:字符串 "abc" 重复叠加 0 次 ...
- LeetCode算法题-Repeated String Match(Java实现)
这是悦乐书的第289次更新,第307篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第156题(顺位题号是686).给定两个字符串A和B,找到A必须重复的最小次数,使得B是 ...
最新文章
- 查看远端的端口是否通畅3个简单实用案例!
- android截取字符串工具类,StringsUtil字符串工具类---灵活截取
- Linux部署Node.js应用
- c# 变量,对象,静态类型,集合类的线程安全回顾
- WPF:使用WPF应用程序中的默认网络凭据和凭据存储来管理自动登录
- EPLAN如何保护电气图纸
- 混合储能系统能量管理simulink仿真模型。 蓄电池和超级电容构成的混合储能系统能量管理控制策略
- Android Studio实现用户登陆界面demo(xml实现)
- 内网渗透测试:隐藏通讯隧道技术
- echarts饼图显示百分比
- 第二篇:mig IP的创建
- SAP ADM100 学习笔记
- 8321平台修改WIFI_ONLY总结
- [javascript] 实现展开全文和收起全文效果
- python井字棋_python实现井字棋小游戏
- hdu 6112 今夕何年(模拟)
- 恶梦护士 asa_Web开发人员的10大噩梦
- 判断三个老师教哪门课命题c语言,教师招聘考试真题7-2013年郑州市高新区
- ceph-mimic版本的安装使用1
- 2013年广州盛成php开发工程师第一轮笔试回顾
热门文章
- java中所有的类都继承于_Java中所有的类都是通过直接或间接地继承()类得到的...
- keil 查看 stm32 io波形_如何系统地入门学习stm32?
- php ajax 分页phpapi,ajax分页_php ajax分页代码
- HDU3183(RMQ问题,ST算法)
- [loj6391][THUPC2018]淘米神的树(Tommy)
- 关于寻路算法的一些思考(5):处理移动中的障碍物
- Ubuntu 16.04 安装 Gazebo
- 一篇漫画,看懂云计算!
- Spring循环依赖的三种方式,你都清楚吗?
- Java集合框架:Set(HashSet,LinkedHashSet,TreeSet)