字符串最短循环字串(题解)

66 阅读1分钟

问题描述

  • 输入一个字符串,判断其是否完全循环,若是循环的,输出最短的循环子串,否则输出空""
  • 如输入 abababab,输出 ab;输入 ab 则输出 ""

输入格式

  • 合法字符串 如 abcabcabcabc aaa

输出格式

  • 最短的循环子串 "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;
}