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

Leetcode.664 奇怪的打印机

题目链接

Leetcode.664 奇怪的打印机 hard

题目描述

有台奇怪的打印机有以下两个特殊要求:

  • 打印机每次只能打印由 同一个字符 组成的序列。
  • 每次可以在从起始到结束的任意位置打印新字符,并且会覆盖掉原来已有的字符。

给你一个字符串 s ,你的任务是计算这个打印机打印它需要的最少打印次数。

示例 1:

输入:s = “aaabbb”
输出:2
解释:首先打印 “aaa” 然后打印 “bbb”。

示例 2:

输入:s = “aba”
输出:2
解释:首先打印 “aaa” 然后在第二个位置打印 “b” 覆盖掉原来的字符 ‘a’。

提示:

  • 1 ≤ s . l e n g t h ≤ 100 1 \leq s.length \leq 100 1s.length100
  • s 由小写英文字母组成

解法:区间dp

  • s = "a",需要打印 1 1 1 次;
  • s = "ab",需要打印 2 2 2 次;
  • s = "aba",需要打印 2 2 2 次;
  • s = "abab",需要打印 3 3 3 次;

当 最后一个字符 和 第一个字符 相同 时,例如 s = "aba" 。那么 s = "aba" 就和 s = "ab"的打印次数一样。

当 最后一个字符 和 第一个字符 不同 时,例如 s = "abab"。那么 s = "abab" 的打印次数,就应该是所有组合中最小的打印次数:

  • a + bab = 1 + 2 = 3
  • ab + ab = 2 + 2 = 4
  • aba + b = 2 + 1 = 3

所以 s = "abab" 的最少打印次数是 3 3 3

我们定义 f ( i , j ) f(i,j) f(i,j) 为打印区间 [ i , j ] [i,j] [i,j] 所需要的最少打印次数,那么最终返回的答案就是 f ( 0 , n − 1 ) f(0,n-1) f(0,n1)

  • i = j i = j i=j时,区间 [ i , j ] [i,j] [i,j] 只有一个字符,所以只需要打印一次,即 f ( i , j ) = 1 f(i,j) = 1 f(i,j)=1
  • s [ i ] = s [ j ] s[i] = s[j] s[i]=s[j]时, f ( i , j ) = f ( i , j − 1 ) f(i,j) = f(i,j-1) f(i,j)=f(i,j1)
  • s [ i ] ≠ s [ j ] s[i] \neq s[j] s[i]=s[j]时, f ( i , j ) = m i n { f ( i , k ) + f ( k + 1 , j ) } ( i ≤ k < j ) f(i,j) = min\{ f(i,k) + f(k+1,j) \} \quad (i \leq k < j) f(i,j)=min{f(i,k)+f(k+1,j)}(ik<j)

时间复杂度: O ( n 3 ) O(n^3) O(n3)

C++代码:

class Solution {
public:int strangePrinter(string s) {int n = s.size();vector<vector<int>> f(n,vector<int>(n,1e9));for(int i = 0;i < n;i++) f[i][i] = 1;for(int i = n-1;i >= 0;i--){for(int j = i + 1;j < n;j++){if(s[i] == s[j]){f[i][j] = f[i][j - 1];}else{for(int k = i;k < j;k++) f[i][j] = min(f[i][j] , f[i][k]+f[k+1][j]);}//printf("f[%d][%d] = %d\n",i,j,f[i][j]);}}return f[0][n-1];}
};

相关文章:

Leetcode.664 奇怪的打印机

题目链接 Leetcode.664 奇怪的打印机 hard 题目描述 有台奇怪的打印机有以下两个特殊要求&#xff1a; 打印机每次只能打印由 同一个字符 组成的序列。每次可以在从起始到结束的任意位置打印新字符&#xff0c;并且会覆盖掉原来已有的字符。 给你一个字符串 s &#xff0c;你…...

正中优配:散户怎么实现T+0?散户在股市上怎么变相T+0?

T0是指当天买入的标的物&#xff0c;在当天就能卖出的买卖方式&#xff0c;其中&#xff0c;在a股市场上&#xff0c;散户能够通过一些办法直接地完成T0买卖方式&#xff0c;接下来&#xff0c;正中优配为大家预备了相关内容&#xff0c;以供参阅。 散户在股票市场上&#xff0…...

ZooInspector

一、在window&#xff0c;使用我们先打开Zookeeper,目录bin下的zkServer.cmd&#xff0c;把Zookeeper运行起来 ​编辑https://img.111com.net/attachment/art/187687/5f0c25fbe580c.png 二、可以使用目录bin下的zkCli.cmd&#xff0c;查询Zookeeper数据的方式&#xff0c;但是…...

2023高教社杯 国赛数学建模B题思路 - 多波束测线问题

1 赛题 B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀 速直线传播&#xff0c; 在不同界面上产生反射&#xff0c; 利用这一原理&#xff0c;从测量船换能器垂直向海底发射声波信 号&#xff0c;并记录从声波发射到信…...

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(9 月 4 日论文合集)

文章目录 一、检测相关(8篇)1.1 Impact of Image Context for Single Deep Learning Face Morphing Attack Detection1.2 A Theoretical and Practical Framework for Evaluating Uncertainty Calibration in Object Detection1.3 What Makes Good Open-Vocabulary Detector: A…...

游戏优化注意点

特效性能分析&#xff1a; 1、粒子数量太多&#xff0c;这个会对CPU的耗时产生一定的压力。 2、粒子的size太大&#xff0c;这样容易导致渲染的像素数量非常高。 3、Overdraw非常高&#xff0c;当场上粒子数非常高导致叠层很高&#xff0c;会造成Overdraw很高&#xff0c;这会…...

【unity3D】如何修改相机的默认视角

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的如何修改相机的默认视角 如何修改相机的默认视角 Game窗口运行的话视角是这样的&#xff1a; 此时Scene窗口的视角是这样的&…...

Docker的初级使用

Docker的初级使用 Docker的安装1.1 如果之前安装过旧版本的Docker,可以使用下面命令卸载:1.2.安装docker1.3.启动docker1.4.配置镜像加速2.CentOS7安装DockerCompose2.1.下载2.2.修改文件权限2.3.Base自动补全命令:3.Docker镜像仓库3.1.简化版镜像仓库3.2.带有图形化界面版本…...

minimumLineSpacing和minimumInteritemSpacing问题研究

结论&#xff1a;minimumLineSpacing和minimumInteritemSpacing问题研究 (1)如果cell的宽度是固定的&#xff0c;方向是水平时&#xff0c; 1 3 5 2 4 6 minimumLineSpacing 是 12 到 34的距离 minimumInteritemSpacing 是1到2的距离 (2)如果cell的宽度是不固定的&#xff0…...

【操作系统】聊聊Linux内存工作机制

内存主要是用来存储系统和应用程序的指令、数据、缓存等 内存映射 内存是需要安全机制保护的&#xff0c;所以只有内核才可以直接访问物理内存。进程如果要访问内存需要通过独立的虚拟地址空间。 虚拟地址空间其实包含两部分。一部分是内核空间&#xff0c;另一部分就是用户…...

MySQL索引的类型有哪些?

分析&回答 从功能逻辑角度&#xff0c;可分为&#xff1a; 普通索引 INDEX(普通索引) ALTER TABLE table_name ADD INDEX index_name ( column )唯一索引 UNIQUE(唯一索引) ALTER TABLE table_name ADD UNIQUE (column)主键索引 PRIMARY KEY&#xff08;主键索引…...

【JavaScript】在指定dom元素前面创建标签元素

一、基础操作过程 要在指定的DOM元素前面创建标签元素&#xff0c;有以下步骤&#xff1a; 获取指定的DOM元素&#xff1a;使用document.querySelector()或document.getElementById()等方法来获取指定的DOM元素。 const targetElement document.querySelector(#targetElement…...

ARMv8 TTBRx寄存器

ARMv8 TTBRx寄存器 1 TTBR0_ELx and TTBR1_ELx2 TTBR0_ELx2.1 TTBR0_EL12.2 TTBR0_EL22.3 TTBR0_EL33 TTBR13.1 TTBR1_EL13.2 TTBR1_EL2 4 访问TTBRx寄存器4.1 TTBR0_ELx4.2 TTBR1_ELx 5 TTBRx保留的是物理地址还是虚拟地址5.1 保存的是物理地址还是虚拟地址5.2 为什么是物理地…...

C51智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结

目录 1.电机模块开发 1.1 让小车动起来 1.2 串口控制小车方向 1.3 如何进行小车PWM调速 1.4 PWM方式实现小车转向 2.循迹小车 2.1 循迹模块使用 2.2 循迹小车原理 2.3 循迹小车核心代码 3.跟随/避障小车 3.1 红外壁障模块分析​编辑 3.2 跟随小车的原理 3.3 跟随小…...

回归预测 | MATLAB实现PCA-BP主成分降维结合BP神经网络多输入单输出回归预测

回归预测 | MATLAB实现PCA-BP主成分降维结合BP神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现PCA-BP主成分降维结合BP神经网络多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现PCA-BP主成分降维算法结合BP神经网络多输入单输出回…...

Kubernetes(k8s)部署高可用多主多从的Redis集群

Kubernetes部署高可用多主多从的Redis集群 环境准备准备Kubernetes准备存储类 部署redis准备一个命名空间命令创建yaml文件创建&#xff08;推荐&#xff09; 准备redis配置文件准备部署statefulset的资源清单文件执行文件完成部署初始化集群 环境准备 准备Kubernetes 首先你…...

算法专题:前缀和

文章目录 Acwing&#xff1a;前缀和示例2845.统计趣味子数组的数目思路容易理解的写法&#xff1a;前缀和两层循环存在问题&#xff1a;超时 优化写法&#xff1a;两数之和思路&#xff0c;转换为哈希表 前缀和&#xff0c;就是求数组中某一段的所有元素的和。 求子数组中某一…...

bs4库爬取天气预报

Python不仅用于网站开发&#xff0c;数据分析&#xff0c;图像处理&#xff0c;也常用于爬虫技术方向&#xff0c;最近学习了解下&#xff0c;爬虫技术入门一般先使用bs4库&#xff0c;爬取天气预报简单尝试下。 第一步&#xff1a;首先选定目标网站地址 网上查询&#xff0c…...

l8-d8 TCP并发实现

一、TCP多进程并发 1.地址快速重用 先退出服务端&#xff0c;后退出客户端&#xff0c;则服务端会出现以下错误&#xff1a; 地址仍在使用中 解决方法&#xff1a; /*地址快速重用*/ int flag1,len sizeof (int); if ( setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &a…...

编写中间件以用于 Express 应用程序

概述 中间件函数能够访问请求对象 (req)、响应对象 (res) 以及应用程序的请求/响应循环中的下一个中间件函数。下一个中间件函数通常由名为 next 的变量来表示。 中间件函数可以执行以下任务&#xff1a; 执行任何代码。对请求和响应对象进行更改。结束请求/响应循环。调用堆…...

【2023年数学建模国赛】D题解题思路

2023年数学建模国赛D题解题思路 为了解决问题1、问题2和问题3&#xff0c;我们可以采用动态规划方法来制定生产计划&#xff0c;考虑了不确定性因素和多种可能情况的预案集。首先&#xff0c;我们需要定义一些变量和符号&#xff1a; T T T&#xff1a;总的养殖周期&#xff0…...

python爬虫之正则表达式学习

网络安全离不开脚本和工具的开发&#xff0c;python很多又需要正则表达式。 这是一个很好的学习正则表达式的项目 https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md 基本匹配 正则表达式其实就是在执行搜索时的格式&#xff0c;它由一些字…...

智慧能源方案:TSINGSEE青犀AI算法中台在能源行业的应用

一、方案背景 互联网、物联网、人工智能等新一代信息技术引领新一轮产业革命&#xff0c;加快能源革命步伐。尤其是随着人工智能技术的不断发展&#xff0c;AI智能检测与识别技术在能源行业的应用也越来越广泛。与此同时&#xff0c;国家出台多项政策&#xff0c;将智慧能源纳…...

达梦数据库awr报告收集

1、找出快照点snap_id与时间的对应关系 SYS.WRM$_SNAPSHOT表中记录了快照点snap_id与时间的对应关系 例如如下语句可以得出2023-09-04这一天各个时间点对应的快照点snap_id select snap_id,end_interval_time from SYS.WRM$_SNAPSHOT where end_interval_time between to…...

c语言练习43:深入理解strcmp

深入理解strcmp strcmp的主要功能是用来比较两个字符串 模拟实现strcmp 比较两个字符串对应位置上的大小 按字典序进行比较 例如&#xff1a; 输入&#xff1a;abc abc 输出&#xff1a;0 输入&#xff1a;abc ab 输出&#xff1a;>0的数 输入&#xff1a;ab abc …...

NUC980webServer开发

目录 1.RTL8189FTV驱动移植 2.wifi配置工具hostapd移植 1.openssl-1.0.2r交叉编译 2.libnl-3.2.25.tar.gz交叉编译 3.hostapd-2.9.tar.gz交叉编译 4.移植相关工具到开发板 1.RTL8189FTV驱动移植 1. 把驱动文件源码放在linux源码的drivers/net/wireless/realtek/rtlwifi/目录…...

驱动开发--day2

实现三盏灯的控制&#xff0c;编写应用程序测试 head.h #ifndef __HEAD_H__ #define __HEAD_H__#define LED1_MODER 0X50006000 #define LED1_ODR 0X50006014 #define LED1_RCC 0X50000A28#define LED2_MODER 0X50007000 #define LED2_ODR 0X50007014#endif mychrdev.c #inc…...

用户促活留存新方式——在APP中嵌入小游戏

随着APP同类产品的不断出现&#xff0c;APP开发者们面临着激烈的竞争&#xff0c;很多APP下载后被新的APP取代&#xff0c;获客成本越来越高。同时开发者还会面临用户粘性差、忠诚度低、用完即走、留存困难&#xff0c;商业化价值被大大缩减。 在APP中植入小游戏来提高用户活跃…...

MySQL 8.0.34(x64)安装笔记

一、背景 从MySQL 5.6到5.7&#xff0c;再到8.0&#xff0c;版本的跳跃不可谓不大。安装、配置的差别也不可谓不大&#xff0c;特此备忘。 二、过程 &#xff08;1&#xff09;获取MySQL 8.0社区版&#xff08;MySQL Community Server&#xff09;   从 官网 字样 “MySQL …...

物流供应商实现供应链自动化的3种方法

当前影响供应链的全球性问题(如新冠肺炎疫情)正在推动许多物流供应商重新评估和简化其流程。运输协调中的摩擦只会加剧供应商无法控制的现有延误和风险。值得庆幸的是&#xff0c;供应链专业人员可以通过端到端的供应链自动化消除延迟&#xff0c;简化与合作伙伴的沟通&#xf…...

必须做网站等级保护/baike seotl

BZOJ2648: SJY摆棋子 BZOJ2716: [Violet 3]天使玩偶 BZOJ氪金无极限。。。 其实这两道是同一题。 附上2648的题面&#xff1a; Description 这天&#xff0c;SJY显得无聊。在家自己玩。在一个棋盘上&#xff0c;有N个黑色棋子。他每次要么放到棋盘上一个黑色棋子&#xff0c;要…...

在哪里做马可波罗网站/百度网页推广

点击上方 "大数据肌肉猿"关注, 星标一起成长点击下方链接&#xff0c;进入高质量学习交流群今日更新| 950个转型案例分享-大数据交流群本文分为两大节介绍&#xff0c;第一节是数仓建设&#xff0c;第二节是数据治理&#xff0c;内容较长&#xff0c;还请耐心阅读&am…...

樟木头镇做网站/手机如何建立网站

Oracle 体系结构&#xff08;29&#xff09;—— Oracle 的数据字典之&#xff08;三&#xff09;&#xff1a;和用户管理有关的数据字典 Oracle 和用户管理相关的数据字典主要有三个&#xff1a;DBA_USERS、USER_USERS、ALL_USERS 一、DBA_USERS 该数据字典用于查询 Oracle…...

2022年必火的创业项目加盟/公众号seo排名

你知道java多态吗?那么java多态的概念是怎样的呢?一起来看一下什么是java多态&#xff0c;以及java多态代码例子吧!希望可以对你有所帮助哦。一、java多态的概念多态&#xff0c;和名字相同&#xff0c;就是表示&#xff0c;某一时刻程序对应着多个可能的状态。在面相对象当中…...

wordpress 知笔墨/广州搜索seo网站优化

这章描述了接口&#xff0c;这些接口是开发者用于和APNs服务器通信的&#xff0c;讨论了一些功能&#xff0c;这些功能是开发者期望能够达到的。 一般的开发者的要求 ##作为一个开发者你和APNs服务器的通信是通过一个二进制接口。这个接口对于开发者是一个高速度、高能量的&a…...

仓山区城乡建设局网站/营销qq

简单介绍我一个小小DLer&#xff0c;目前在读硕士&#xff0c;已经在深度学习道路上走过了不少时间&#xff0c;写过简书、CSDN&#xff0c;打过各种深度学习比赛&#xff0c;写过很多paper解读文章&#xff0c;最近感觉微信公众号不错&#xff0c;所以打算之后的深度学习笔记都…...