字符串合法性长度
Posted taxue505
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串合法性长度相关的知识,希望对你有一定的参考价值。
题目:
仅由三个字符A、B、C构成字符串,且字符串任意连续三个元素不能完全相同。如“ACCCAB”不合法,“ABBCBCA”合法。求满足条件的长度为n的字符串个数。假定不考虑整数溢出,要求时间和空间复杂度不高于O(N)。
提示:使用动态规划、滚动数组、矩阵乘幂
#include <iostream>
#include <string>
using namespace std;
int NumOfStr(const char* str,int len)
int *dp=new int[len+1];
dp[0]=0;
dp[1]=3;
if(len==0||len==1)
return dp[len];
for (int i=2;i<=len;i++)
if(i>2&&str[i-1]==str[i-2]&&str[i-1]==str[i-3])
return -1;
if(str[i-1]==str[i-2])
dp[i]=2*dp[i-1];
else if (str[i-1]!=str[i-2])
dp[i]=3*dp[i-1];
return dp[len];
int main()
string str;
while (cin>>str)
cout<<NumOfStr(str.c_str(),str.size())<<endl;
return 0;
以上是关于字符串合法性长度的主要内容,如果未能解决你的问题,请参考以下文章
LongestValidParentheses, 求最长合法括号子串长度-----同类问题ValidParentheses,GenerateParentheses