问题描述
小F是一个好学的中学生,今天他学习了数列的概念。他在纸上写下了一个由 0 和 1 组成的正整数序列,长度为 n。这个序列中的 1 和 0 交替出现,且至少由 3 个连续的 0 和 1 组成的部分数列称为「神奇数列」。例如,10101 是一个神奇数列,而 1011 不是。现在,小F想知道在这个序列中,最长的「神奇数列」是哪一个。你能帮他找到吗?
如果有多个神奇数列,那么输出最先出现的一个。
测试样例
样例1:
输入:
inp = "0101011101"
输出:'010101'
样例2:
输入:
inp = "1110101010000"
输出:'10101010'
样例3:
输入:
inp = "1010101010101010"
输出:'1010101010101010'
#include <iostream>
#include <string>
using namespace std;
std::string solution(const std::string &inp) {
int n = inp.size();
if (n < 3) {
return "";
}
int max_len = 0;
int max_start = 0;
int start = 0;
for (int end = 1; end < n; ++end) {
if (inp[end] == inp[end - 1]) {
int current_len = end - start;
if (current_len >= 3 && current_len > max_len) {
max_len = current_len;
max_start = start;
}
start = end;
}
}
// Check the last window
int current_len = n - start;
if (current_len >= 3 && current_len > max_len) {
max_len = current_len;
max_start = start;
}
if (max_len >= 3) {
return inp.substr(max_start, max_len);
} else {
return "";
}
}
int main() {
// Add your test cases here
std::cout << (solution("0101011101") == "010101") << std::endl;
return 0;
}