题目描述
小F是一个好学的中学生,今天他学习了数列的概念。他在纸上写下了一个由 0 和 1 组成的正整数序列,长度为 n。这个序列中的 1 和 0 交替出现,且至少由 3 个连续的 0 和 1 组成的部分数列称为「神奇数列」。例如,10101 是一个神奇数列,而 1011 不是。现在,小F想知道在这个序列中,最长的「神奇数列」是哪一个。你能帮他找到吗?
如果有多个神奇数列,那么输出最先出现的一个。
测试样例
样例1:
输入:inp = “0101011101”
输出:‘010101’
样例2:
输入:inp = “1110101010000”
输出:‘10101010’
样例3:
输入:inp = “1010101010101010”
输出:‘1010101010101010’
样例
算法1
(dp) $O(n)$
简单dp 越发得心应手
核心转移方程
if(inp.charAt(i)!=inp.charAt(i-1))
dp[i]=1+dp[i-1];
else{
dp[i]=1;
}
时刻记录最大长度结束下标。收集答案时候反推就行。初始化也不用动脑子
dp[0]=0;
简单题哥们就不发ac代码了。有要凑题量的或者发题解的哥们们自己写吧hhh
时间复杂度
参考文献
C++ 代码
blablabla
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla