hihocoder 1766

本文探讨了一种解决字符串转换问题的算法,旨在通过最少次数的操作(添加字符或子序列)将空字符串转换为目标字符串。文章详细介绍了算法的实现过程,包括使用C++语言编写的代码示例,展示了如何通过动态规划和数据结构优化来达到目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#1766 : 字符串问题

时间限制:20000ms

单点时限:1000ms

内存限制:256MB

描述

一开始小 Hi 有一个空的字符串 T ,现在他想进行最少次数的操作使得 T 变成 S,操作有以下两种:

1.任选一个字符,将它加到 T 的最后面

2.选择 T 的一个子序列,将它加到 T 的最后面

定义一个串 A 是串 B 的子序列当且仅当串 A 可以由串 B 删掉某些位置后得到。

输入

第一行一个小写字母字符串 S

1 ≤ |S| ≤ 105

输出

输出最少需要几次操作

样例输入

aabaaaabaa

样例输出

5
#include <iostream>
#include<bits/stdc++.h>

using namespace std;
const int MX=100000+1000;
char s[MX],cps[MX];
vector<int> g[30];
int n;
int main()
{
    while(cin>>s)
    {
        for(int i=0;i<30;i++) g[i].clear();

        int p=0,st=-1,i=0;
        int cnt=0;
        n=strlen(s);
        while(i<n)
        {
            char ch=s[p];
            int up=upper_bound (g[ch-'a'].begin(), g[ch-'a'].end(), st)-g[ch-'a'].begin();
          //  cout<<up<<endl;
            if(up==g[ch-'a'].size())
            {
                cnt++;
                if(st==-1)
                {
                    g[ s[p++]-'a'].push_back(i);
                }
                st=-1;
                for(int j=i;j<p;j++)
                    g[ s[j]-'a'].push_back(j);
                i=p;
            }
            else
            {
                st=g[ch-'a'][up];
                p++;
            }
        }
        if(i!=p) cnt++;
        cout<<cnt<<endl;

    }
    return 0;
}

 

基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值