目录
题目
给你一个字符串 sequence
,如果字符串 word
连续重复 k
次形成的字符串是 sequence
的一个子字符串,那么单词 word
的 重复值为 k
。单词 word
的 最大重复值 是单词 word
在 sequence
中最大的重复值。如果 word
不是 sequence
的子串,那么重复值 k
为 0
。
给你一个字符串 sequence
和 word
,请你返回 最大重复值 k
。
示例 1:
输入:sequence = "ababc", word = "ab" 输出:2 解释:"abab" 是 "ababc" 的子字符串。
示例 2:
输入:sequence = "ababc", word = "ba" 输出:1 解释:"ba" 是 "ababc" 的子字符串,但 "baba" 不是 "ababc" 的子字符串。
示例 3:
输入:sequence = "ababc", word = "ac" 输出:0 解释:"ac" 不是 "ababc" 的子字符串。
提示:
1 <= sequence.length <= 100
1 <= word.length <= 100
sequence
和word
都只包含小写英文字母。
解决方案
从size函数获取字符串长度赋值到i中,然后进行遍历sequence中的每一个字符,有前到后匹配word中的字符
,当匹配成功次数等于i时,重复值count加一。当遍历到的字符不等于word中的字符时,令i为0,重新匹配。特殊情况下, buff存储上一个字符,例如aaaaba里寻找aaaba,而不是在aaaa处中断。
class Solution {
public:
int maxRepeating(string sequence, string word)
{
int i = 0;
int count = 0;
char buff=' ';
for (auto e : sequence)
{
if (e == word[i]||e == buff)
{
buff = word[i];
if ((i + 1) == word.size())
{
count++;
i = 0;
continue;
}
i++;
continue;
}
i = 0;
}
return count;
}
};
最后报错了,没看清题意:
给你一个字符串
sequence
,如果字符串word
连续重复k
次形成的字符串是sequence
的一个子字符串,那么单词word
的 重复值为k
。单词word
的 最大重复值 是单词word
在sequence
中最大的重复值。如果word
不是sequence
的子串,那么重复值k
为0
。给你一个字符串
sequence
和word
,请你返回 最大重复值k
。
意思就是如果中断了连续,k应该归0。
优化
在遇到非匹配字母时,会将变量error变为1,在下一次增加k值时,如果eroor为1那么k从0开始重新计数。
class Solution {
public:
int maxRepeating(string sequence, string word)
{
int i = 0;
int error=0;;
int count = 0;
char buff=' ';
for (auto e : sequence)
{
if (e == word[i]||e == buff)
{
buff = word[i];
if ((i + 1) == word.size())
{
if(error==1)
{
count=0;
error=0;
}
count++;
i = 0;
continue;
}
i++;
continue;
}
i = 0;
error=1;
}
return count;
}
};
力扣(LeetCode)看ylb题解
class Solution {
public:
int maxRepeating(string sequence, string word) {
int ans = 0;
string t = word;
int x = sequence.size() / word.size();
for (int k = 1; k <= x; ++k) {
// C++ 这里从小到大枚举重复值
if (sequence.find(t) != string::npos) {
ans = k;
}
t += word;
}
return ans;
}
};
string的find()函数用于找出字母在字符串中的位置。
find(str,position)
find()的两个参数:
str:是要找的元素
position:字符串中的某个位置,表示从从这个位置开始的字符串中找指定元素。
可以不填第二个参数,默认从字符串的开头进行查找。
if (sequence.find(t) != string::npos)
find函数返回值为目标字符的位置,当没有找到目标字符时返回npos。
链接:https://leetcode.cn/problems/maximum-repeating-substring/solutions/1945041/by-lcbin-cg8m/