当前位置: 首页 > news >正文

单词的划分(动态规划)

题目描述

有一个很长的由小写字母组成字符串。为了便于对这个字符串进行分析,需要将它划分成若干个部分,每个部分称为一个单词。出于减少分析量的目的,我们希望划分出的单词数越少越好。你就是来完成这一划分工作的。

输入

第一行,一个字符串。(字符串的长度不超过300)
第二行一个整数n,表示单词的个数。(n≤100)
第3~n+2行,每行列出一个单词。

输出

一个整数,表示字符串可以被划分成的最少的单词数

样例输入
realityour
5
real
reality
it
your
our
样例输出
2

思路分析

读入数据:字符串s,n个单词,单词存入set容器。

动态规划。

dp[i]表示前i个字符可以被划分成的最少的单词数。

考虑数据规模,初始化dp数组大小为len+1(len=s.size()),各元素大小为1000,但dp[0]=0。

i从0遍历到len。

对于任意i,如果dp[i]=1000,证明前i个字符没有最小划分;否则,遍历wordset中的单词,compare找到字符串s从位置i开始能够匹配的单词t,更新dp[i+t.size()]=min(dp[i]+1,dp[i+t.size()])。

代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
string s,word;
int len,n;
set<string>wordset;
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>s;len=s.size();cin>>n;for(int i=1;i<=n;i++){cin>>word;wordset.insert(word);}vector<int>dp(len+1,1000);dp[0]=0;for(int i=0;i<=len;i++){if(dp[i]==1000)continue;for(string t:wordset){int lt=t.size();if(i+lt<=len&&s.compare(i,lt,t)==0){dp[i+lt]=min(dp[i]+1,dp[i+lt]);}}}cout<<dp[len];return 0;
}
http://www.lryc.cn/news/613171.html

相关文章:

  • OpenCV 图像处理基础操作指南(一)
  • 非化学冷却塔水处理解决方案:绿色工业时代的革新引擎
  • Android视图状态以及重绘
  • 如何将服务器中的Docker镜像批量导出?
  • uat是什么
  • SIP - Centos 7 搭建freeswitch服务器
  • Linux第一阶段练习
  • Microsoft Office PowerPoint 制作简单的游戏素材
  • Sklearn 机器学习 数据降维PCA 自己实现PCA降维算法
  • 智能升级革命:Deepoc具身模型开发板如何让传统除草机器人拥有“认知大脑”
  • 【智能协同云图库】第六期:基于 百度API 和 Jsoup 爬虫实现以图搜图
  • RabbitMQ面试精讲 Day 15:RabbitMQ故障转移与数据恢复
  • 【数据结构】排序(sort) -- 交换排序(冒泡快排)
  • 大数据杀熟:技术阴影下的消费陷阱与破局之道
  • Dokcer创建中间件环境
  • RabbitMQ面试精讲 Day 13:HAProxy与负载均衡配置
  • 【Day 18】Linux-DNS解析
  • 香港网站服务器被占用的资源怎么释放?
  • 股指期货合约是个啥?怎么玩?
  • JVM 终止机制详解:用户线程与守护线程
  • WD6208资料和引脚图
  • MCU中的晶振(Crystal Oscillator)
  • 时间戳表示
  • 汽车娱乐信息系统域控制器的网络安全开发方案
  • 基于Ruby的IP池系统构建分布式爬虫架构
  • 基于 MATLAB 的 QPSK 调制、解调、通过高斯信道的误码率计算,并绘制误码率图和眼图、星座图
  • SurgRIPE 挑战赛:手术机器人器械位姿估计基准测试|文献速递-医学影像算法文献分享
  • 【源码】AndroidPlayer
  • 智能升级新纪元:基于Deepoc具身模型外拓开发板的除草机器人认知进化
  • 【图文教程】三步用Cpolar+JuiceSSH实现手机远程连接内网Linux虚拟机