问题描述
- 输入一个字符串,判断其是否完全循环,若是循环的,输出最短的循环子串,否则输出空
"" - 如输入
abababab,输出ab;输入ab则输出""
输入格式
- 合法字符串 如
abcabcabcabcaaa
输出格式
- 最短的循环子串
"abc""a"
输入样例
"abcabcabcabc"
输出样例
"abc"
遍历所有可能的子串长度,从1到inp.size()/2,检查当前长度的子串是否可以构成循环,如果可以,返回该子串,如果没有找到符合条件的子串,返回空字符串
#include <iostream>
#include <string>
std::string solution(const std::string &inp) {
for (int len = 1; len <= inp.size() / 2; ++len) {
std::string pattern = inp.substr(0, len);
bool isCyclic = true;
for (int i = 0; i < inp.size(); i += len) {
if (inp.substr(i, len) != pattern) {
isCyclic = false;
break;
}
}
if (isCyclic) {
return pattern;
}
}
return "";
}
int main() {
// 添加你的测试用例
std::cout << (solution("abcabcabcabc") == "abc") << std::endl;
std::cout << (solution("abababab") == "ab") << std::endl;
std::cout << (solution("aaa") == "a") << std::endl;
std::cout << (solution("ab") == "") << std::endl;
return 0;
}