3、给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s = "abab" 输出: true 解释: 可由子串 "ab" 重复两次构成。 示例 2: 输入: s = "aba" 输出: false 示例 3: 输入: s = "abcabcabcabc" 输出: true 解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)
时间: 2023-07-19 13:21:18 浏览: 82
这问题可以通过遍历字符串s的所有子串来解决。我们可以从子串长度为1开始,逐渐增加子串长度,直到子串长度为s的一半。对于每个子串长度,我们可以检查该子串是否可以通过重复多次构成s。如果可以,则返回true;否则继续遍历下一个子串长度。
下面是一个基于这个思路的C++代码实现:
```c++
#include <string>
using namespace std;
class Solution {
public:
bool repeatedSubstringPattern(string s) {
int n = s.size();
for (int len = 1; len <= n / 2; len++) {
if (n % len == 0) {
bool flag = true;
for (int i = len; i < n; i++) {
if (s[i] != s[i - len]) {
flag = false;
break;
}
}
if (flag) {
return true;
}
}
}
return false;
}
};
```
在上面的代码中,我们定义了一个名为Solution的类,其中包含一个名为repeatedSubstringPattern的函数,该函数接受一个字符串s作为输入,返回一个bool类型的值,表示该字符串是否可以由一个子串重复多次构成。在函数中,我们使用两层循环来遍历所有子串,并进行检查。
希望这个回答能够解决你的问题。