【算法千题案例】每日LeetCode打卡——77.重复的子字符串
2023-03-14 22:53:22 时间
原题样例:重复的子字符串
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。
给定的字符串只含有小写英文字母,并且长度不超过10000。
示例1:
输入: "abab"
输出: True
解释: 可由子字符串 "ab" 重复两次构成。
示例2:
输入: "aba"
输出: False
示例3:
输入: "abcabcabcabc"
输出: True
解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)
提示:
- 1 <= num1.length, num2.length <= 104
- num1 和num2 都只包含数字 0-9
- num1 和num2 都不包含任何前导零
C#方法:排序遍历
使用给定的字符串去构造 next 数组,内部是DP 的实现 --> next 数组,索引和值存储的都是字符串中字符的数组下标
判断 next 数组是否满足一个特定的条件
代码:
public class Solution {
public bool RepeatedSubstringPattern(string s)
{
var nextArray = GetKMPNextArray(s);
var tailIndex = s.Length - 1;
return nextArray[tailIndex] != -1 && s.Length % (tailIndex - nextArray[tailIndex]) == 0;
}
private int[] GetKMPNextArray(string s)
{
var forReturn = Enumerable.Repeat(-1, s.Length).ToArray();
for (var i = 1; i < s.Length; i++)
{
var j = forReturn[i - 1];
while (j >= 0 && s[j + 1] != s[i])
j = forReturn[j];
if (s[j + 1] == s[i])
forReturn[i] = j + 1;
}
return forReturn;
}
}
执行结果
通过
执行用时:96 ms,在所有 Java 提交中击败了46.50%的用户
内存消耗:46.4 MB,在所有 Java 提交中击败了38.90%的用户
Java 方法:计数
思路解析
代码:
class Solution {
public boolean repeatedSubstringPattern(String s) {
int n = s.length();
for (int i = 1; i * 2 <= n; ++i) {
if (n % i == 0) {
boolean match = true;
for (int j = i; j < n; ++j) {
if (s.charAt(j) != s.charAt(j - i)) {
match = false;
break;
}
}
if (match) {
return true;
}
}
}
return false;
}
}
执行结果
通过
执行用时:9 ms,在所有 Java 提交中击败了77.76%的用户
内存消耗:38.7 MB,在所有 Java 提交中击败了80.40%的用户
复杂度分析
时间复杂度:O( n^2)
空间复杂度:O(1)
总结
- 今天是力扣算法题打卡的第七十七天!
- 文章采用
C#
和Java
两种编程语言进行解题 - 一些方法也是参考力扣大神写的,也是边学习边分享,再次感谢算法大佬们
- 那今天的算法题分享到此结束啦,明天再见!
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的