9.15【A】

2472

定义DPi为以i结尾的回文字符串,所能组成的最大数量的回文字符串数量

有关键洞察为,回文字符串长度最多为k与k+1,对于k+2及后面的所有情况,都可以由贪心归纳为k与k+1

对于1到n的所有下标,dpi可由i-k+1与i-k两个下标得到,即分别对应以i为结尾的字符串长度为k与k+1的情况

首先判断以i为结尾的子串,在k与k+1的情况下是否能构成回文字符串

若都不能,则dpi取0

否则,取max

最终取1到n之间的dpMax

复制代码
class Solution {
public:
    int maxPalindromes(string s, int k) {
        int n=s.size();
        vector<int>dp(n,0);
        bool flag=true;
        for(int i=0;i<(k+1)/2;i++){
            if(s[i]!=s[k-i-1]){
                flag=false;
                break;
            }
        }
        if(flag){dp[k-1]=1;}
        flag=true;
        for(int i=0;i<(k+1)/2;i++){
            if(s[i]!=s[k-i]){
                flag=false;
                break;
            }
        }
        if(flag){dp[k]=1;}
        int res=max(dp[k-1],dp[k]);
        for(int i=1;i<=k;i++){dp[i]=max(dp[i],dp[i-1]);}
        for(int i=k+1;i<n;i++){
            bool flag0=true,flag1=true;
            for(int j=0;j<k/2;j++){
                if(s[i-k+1+j]!=s[i-j]){
                    flag0=false;
                    break;
                }
            }
            for(int j=0;j<(k+1)/2;j++){
                if(s[i-k+j]!=s[i-j]){
                    flag1=false;
                    break;
                }
            }
            dp[i]=max(dp[i],dp[i-1]);
            if(flag0){dp[i]=max(dp[i-k]+1,dp[i]);}
            if(flag1){dp[i]=max(dp[i-k-1]+1,dp[i]);}
            // for(int j=i-k+1;j<=(i+1)/2;j++){
            //     if(s[j]!=)
            // }
            res=max(res,dp[i]);
        }
        return res;
    }
};

正解

相关推荐
成为深度学习高手1 小时前
DAG:沿时间与通道双相关建模的外生变量时序预测
网络·人工智能·深度学习·算法·机器学习·数据挖掘·时序数据库
阳明山水2 小时前
CEDAR双重解耦实现决策与干预分离
人工智能·深度学习·算法·机器学习·架构
Zootopia6262 小时前
美国载人飞船Crew-13明晚发射!
人工智能·算法·机器学习·数学建模·无人机·创业创新·信息与通信
zhangfeng11332 小时前
qjlDim 含义 TurboQuant QJL Quantized Johnson-Lindenstrauss,量化JL随机投影
人工智能·算法·ai编程·npu
HwJack202 小时前
【HarmonyOS开发小实践】HarmonyOS GC 引用计数 vs 对象追踪,三种回收算法
jvm·算法·harmonyos
blxr_2 小时前
力扣hot100前k个高频元素https://leetcode.cn/problems/top-k-frequent-elements/
算法·leetcode·职场和发展
longlongzihan12 小时前
LeetCode 17电话号码的字母组合:回溯算法(DFS)详解
c++·算法·leetcode·深度优先
封印师请假去地球钓鱼12 小时前
边解边变的问题:从“决策依赖“一词出发
人工智能·算法
今晚打老虎13 小时前
c++之提高A(前缀和)(第三课)
数据结构·c++·算法