题目

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)相关推荐

  1. 【快乐水题】686. 重复叠加字符串匹配

    原题: 力扣链接:686. 重复叠加字符串匹配 题目简述: 给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1. 注 ...

  2. 从 重复叠加字符串匹配 看Java String源码中的contains方法

    原题:重复叠加字符串匹配 解题思路已经写在代码中了: class Solution {public:bool contain(string &a, string &b, long lo ...

  3. LeetCode 686. 重复叠加字符串匹配

    1.题目 给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1. 举个例子,A = "abcd",B = & ...

  4. leetcode(力扣) 686. 重复叠加字符串匹配

    文章目录 题目描述 思路分析 完整代码 题目描述 给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1. 注意:字符串 ...

  5. Q686 重复叠加字符串匹配

    给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1. 举个例子,A = "abcd",B = " ...

  6. LeetCode686——重复叠加字符串匹配

    题目 给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1. 注意:字符串 "abc" 重复叠加 ...

  7. C#LeetCode刷题之#686-重复叠加字符串匹配(Repeated String Match)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3963 访问. 给定两个字符串 A 和 B, 寻找重复叠加字符串A ...

  8. LeetCode686 Repeated String Match(字符串匹配)

    给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1. 注意:字符串 "abc" 重复叠加 0 次 ...

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

    这是悦乐书的第289次更新,第307篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第156题(顺位题号是686).给定两个字符串A和B,找到A必须重复的最小次数,使得B是 ...

最新文章

  1. 查看远端的端口是否通畅3个简单实用案例!
  2. android截取字符串工具类,StringsUtil字符串工具类---灵活截取
  3. Linux部署Node.js应用
  4. c# 变量,对象,静态类型,集合类的线程安全回顾
  5. WPF:使用WPF应用程序中的默认网络凭据和凭据存储来管理自动登录
  6. EPLAN如何保护电气图纸
  7. 混合储能系统能量管理simulink仿真模型。 蓄电池和超级电容构成的混合储能系统能量管理控制策略
  8. Android Studio实现用户登陆界面demo(xml实现)
  9. 内网渗透测试:隐藏通讯隧道技术
  10. echarts饼图显示百分比
  11. 第二篇:mig IP的创建
  12. SAP ADM100 学习笔记
  13. 8321平台修改WIFI_ONLY总结
  14. [javascript] 实现展开全文和收起全文效果
  15. python井字棋_python实现井字棋小游戏
  16. hdu 6112 今夕何年(模拟)
  17. 恶梦护士 asa_Web开发人员的10大噩梦
  18. 判断三个老师教哪门课命题c语言,教师招聘考试真题7-2013年郑州市高新区
  19. ceph-mimic版本的安装使用1
  20. 2013年广州盛成php开发工程师第一轮笔试回顾

热门文章

  1. java中所有的类都继承于_Java中所有的类都是通过直接或间接地继承()类得到的...
  2. keil 查看 stm32 io波形_如何系统地入门学习stm32?
  3. php ajax 分页phpapi,ajax分页_php ajax分页代码
  4. HDU3183(RMQ问题,ST算法)
  5. [loj6391][THUPC2018]淘米神的树(Tommy)
  6. 关于寻路算法的一些思考(5):处理移动中的障碍物
  7. Ubuntu 16.04 安装 Gazebo
  8. 一篇漫画,看懂云计算!
  9. Spring循环依赖的三种方式,你都清楚吗?
  10. Java集合框架:Set(HashSet,LinkedHashSet,TreeSet)