LeetCode每日一题——重复的子字符串
题目要求:
给定一个非空的字符串 s
,检查是否可以通过由它的一个子串重复多次构成。
示例 1:
输入: s = "abab" 输出: true 解释: 可由子串 "ab" 重复两次构成。
示例 2:
输入: s = "aba" 输出: false
示例 3:
输入: s = "abcabcabcabc" 输出: true 解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)
代码实现:
bool repeatedSubstringPattern(char* s) {
int n = strlen(s);//获取字符串s的长度
for (int i = 1; i * 2 <= n; ++i) {//子字符串最少重复两次得到原字符串,防止越界访问
if (n % i == 0) {
bool match = true;//对match初始化为true
for (int j = i; j < n; ++j) {
if (s[j] != s[j - i]) {
match = false;
break;//不相等时跳出内层循环,避免无效试错
}
}
if (match) {
return true;//此语句执行后,则不会执行之后的程序
}
}
}
return false;//所有子串尝试后都不匹配,返回false
}