首页 > 编程语言 >算法练习-第十天【字符串】

算法练习-第十天【字符串】

时间:2022-10-07 23:35:19浏览次数:81  
标签:return 第十天 后缀 next 算法 字串 字符串

字符串

459. 重复的子字符串

参考:代码随想录

思考

判断一个字符串s是否包含子串,可以将2个s首尾相连,组合成t=s+s(剔除首尾字符),如果字符串s存在字串,那么t一定存在字符串s
例如,一个字符串由abab组成,那么组合后是abababab,去掉首尾之后bababa,那么字符串中依然存在一个字符串abab

func repeatedSubstringPattern(s string) bool {
	t := s + s
	return strings.Contains(t[1:len(t)-1], s)
}

进阶

可以考虑使用KMP算法实现,重复字串是最长相同前后缀不包含的那部分

func repeatedSubstringPattern(s string) bool {
	n := len(s)
	next := make([]int, n)
	j := -1
	next[0] = j
	for i := 1; i < n; i++ {
		for j >= 0 && s[i] != s[j+1] {
			j = next[j]
		}
		if s[i] == s[j+1] {
			j++
		}
		next[i] = j
	}

	if next[n-1] != -1 && n%(n-(next[n-1]+1)) == 0 {
		return true
	}

	return false
}

总结

使用next数组元素-1的方式实现,next[n-1]+1是最长相同前后缀的长度,n-(next[n-1]+1)就是最长相同前后缀不包含的子串, 如果能被长度n整除,那么就可以断定字符串是由这个字串重复构成。

标签:return,第十天,后缀,next,算法,字串,字符串
From: https://www.cnblogs.com/neilliu/p/16756644.html

相关文章

  • LeetCode 阶乘后的零算法题解 All In One
    LeetCode阶乘后的零算法题解AllInOnefactorial阶乘后的零原理图解实现factorial计算后面0的个数,除0!本身的0阶乘!https://www.shuxuele.com/num......
  • 简单理解slot算法和shadow DOM
    阅读完这篇博客你会有以下收获:slot算法是什么?shadowDOM是什么?vueslot机制与w3cwebcomponent规范的shadowDOM渲染结果有何异同?slot算法Theslottingalgorithmassign......
  • 【算法篇】总结了四种链表,单链表,双向链表,循环链表,双向循环链表,顺手刷了两道面试题
    今日目录:1:能够说出链表的存储结构和特点2:能够说出链表的几种分类及各自的存储结构3:能说出链表和数组的差异4:完成实战演练题目5:完成综合案例1、概念及存储结构问题:思考一下动......
  • 听说你要卷算法,我已被各种
    今日目标:1:能够说出什么是数据结构,什么是算法2:能说出大O时间复杂度是怎么得来的3:能够说出时间复杂度的几个分析原则并加以实际应用4:能够说出常见的几种时间复杂度O(1),O(n),O(logn),O......
  • 第五章 字符串及正则表达式
    实例01使用字符串拼接输出一个关于程序员的笑话点击查看代码programmer_1='程序员甲:搞IT太辛苦了,我想换行......怎么办?'programmer_2='程序员乙:敲一下回车键'prin......
  • 二进制加法,二进制数以字符串形式保存,最终返回字符串
    思路:先将字符串反转,用max()选出两个字符串中长的那个,短的补位0,从低位到高位计算,进位初始值0,计算时每次遍历结果为(进位+a[i]+b[i])%2,进位改为(进位+a[i]+b[i])/2,字符串全部......
  • 排序算法
    1.冒泡排序  2.选择排序 3.插入排序  4.快速排序 ......
  • 计算机系统磁盘结构和磁盘调度算法
    磁盘结构盘面(Platter):一个磁盘有多个盘面;磁道(Track):盘面上的圆形带状区域,一个盘面可以有多个磁道;扇区(TrackSector):磁道上的一个弧段,一个磁道可以有多个扇区,它是最小的物理......
  • 基本数据类型和字符串互转
      常用sprintf函数,用于其他类型转字符串:  例子:  简单理解一下sprintf的用法即可  注意,其中  a和b之间会输出空格,因为%d%d之间有空格,他们之间有什么......
  • 字符串函数
    常用三类系统函数:1)字符串;2)时间;3)数学1)头文件<string.h>,找C标准库参考手册看即可,里面包含众多C标准库–<string.h>|菜鸟教程(runoob.com)此处提供一个链接仅供参考......