字符串合法性长度

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

具体数学-第6课(下降阶乘幂)

P21 对角化和矩阵乘幂线性代数

字符串空格替换合法括号序列判断求最长无重复子串问题

power(乘幂)函数剖析