leetcode每日一题686. 重复叠加字符串匹配 字符匹配还得看KMP
写在前面
字符匹配 阿巴阿巴,已经很久没看KMP算法了,就先暴力求解一下了。后续更新如何使用KMP算法解决此题。明天或者后天~
题目
- 重复叠加字符串匹配 难度系数:****
给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,
使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1。
注意:字符串 "abc" 重复叠加 0 次是 "",
重复叠加 1 次是 "abc",重复叠加 2 次是 "abcabc"。
示例
示例1:
输入:a = "abcd", b = "cdabcdab"
输出:3
解释:a 重复叠加三遍后为 "abcdabcdabcd",
此时 b 是其子串。
示例2:
输入:a = "a", b = "aa"
输出:2
示例3:
输入:a = "a", b = "a"
输出:1
示例4:
输入:a = "abc", b = "wxyz"
输出:-1
提示
1 <= a.length <= 10^4
1 <= b.length <= 10^4
a 和 b 由小写英文字母组成
思路
这道题的难点就在于如何快速匹配字符串,并且返回其子串所处总串的位置。
同时重复叠加字符串的长度不可能超过(a字符串长度的两倍+b字符串的长度)
代码实现
class Solution {
public int repeatedStringMatch(String a, String b) {
int m = a.length(), n = b.length();
//利用StringBuilder操作字符串效率最高
StringBuilder s = new StringBuilder();
int result = 0;
//进行遍历
for(int i = m;i <= 2*m+n;i += m){
//每次重复叠加
s.append(a);
//结果+1
result++;
//如果当前存在子字符串其下表位置
if(s.indexOf(b) != -1){
//就返回值
return result;
}
}
//反之没有找到
return -1;
}
}
执行结果
优化方案
KMP算法!!! 后面写好之后 会附带链接的
写在最后
每日一题 从我做起
每天进步点 每天收获点
愿诸君 事业有成 学有所获
如果觉得不错 别忘啦一键三连哦~
今天可是有供暖期的一天哦~