Leetcode.664 奇怪的打印机

这篇具有很好参考价值的文章主要介绍了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++代码:文章来源地址https://www.toymoban.com/news/detail-708382.html

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 奇怪的打印机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 老毛子、华硕固件USB连接打印机,普通打印机变无线打印机

    本次作为打印机服务器的是Newifi Mini,1千兆wan口,2百兆lan口,1USB2.0接口,打印机型号为canon ip1180,年代非常久远,不过墨盒可以反复加墨,算下来打印费用很便宜,无奈不支持无线打印,于是利用路由器的usb口使其变成无线打印机。 由于打印机离主机位置较远,且布线不方

    2024年02月08日
    浏览(135)
  • 安装pdf打印机无法找到安装打印机的核心驱动

    安装pdf打印机无法找到安装打印机的核心驱动,出现这种情况下。可以利用以下方法解决 * C:WindowsSystem32DriverStore* 这个文件夹。在 FileRepository 文件夹上面,点击右键“管理员取得所有权”命令,这个时候会跳出一个命令行窗口不停的执行取得权限操作,耐心等待几十秒钟等

    2024年02月11日
    浏览(55)
  • Android Pos 打印机支持库(适合市场常见打印机使用)

    ① 集成多个品牌打印机的SDK:GPrinter(佳博),Epson(爱普森),Bixolon(必胜龙), ② 已调试支持的打印机品牌:GPrinter(佳博),Epson(爱普森),Bixolon(必胜龙),XPrinter(芯烨),Element(元素) ③ 支持局域网,USB,蓝牙通讯(具体情况取决于打印机以及使用的SDK策略) ④ 开发者只需要关心打

    2024年03月13日
    浏览(62)
  • mac Canon打印机连接教程(附打印机驱动下载)

    网上大多是windows版驱动和安装教程,mac链接相对参考材料较少,记录于此方便节省大家时间。本篇以Canon iR C3025打印机为例,流程大同小异。

    2024年02月12日
    浏览(72)
  • win10、11共享打印机报错无法连接到打印机

    大多数是windows更新补丁导致的,只需运行相应版本的的bat文件就可以解决。 使用方法:将下载好的压缩包解压,并运行bat文件。只要打了2021年10月补丁的电脑都需要运行,不管是服务端还是客户端。比如服务端是xp(xp不存在有2021年10月的补丁),那么就只需要客户端运行即

    2024年02月13日
    浏览(65)
  • 运维知识讲解之打印机连接以及电脑局域网共享打印机

    市面上比较常见的打印机主要是惠普(hp)、佳能(Canon)、爱普生(EPSON)、Brother和联想(Lenovo)几个品牌,这些品牌一般都有自己的打印机驱动下载网站,如果是杂牌的,则只能通过原装配送的驱动,或者网上百度的网站下载了(一般有插件),所以尽量用官网下载驱动比

    2024年02月16日
    浏览(66)
  • 在局域网下是如何共享打印机让大家共用一台打印机

    打印机共享如何设置?这是在工作中经常遇到的问题。由于公司购买的打印机不带网络打印功能,但又想能让办公室里的所有人员都能共用这一台打印机。那么把打印机设置成共享就能很好解决这一问题。下面大家一起来看看在局域网下是如何共享打印机的。 在带有打印机的

    2024年02月06日
    浏览(73)
  • windows无法连接到打印机?三个方法连接打印机(Win10系统)

    在日常办公中,我们经常会用到打印机。一般情况下,打印机要与电脑连接才可以使用。有很多用户反馈, windows无法连接到打印机,这是怎么回事呢? 请看文章是如何解决打印机无法连接到计算机的问题! 操作环境: 演示机型:华硕X8AE43In-SL 系统版本:Windows 10 有时遇到:

    2024年02月04日
    浏览(77)
  • 惠普HP1020打印机HPLaserJet1020 打印机苹果电脑Mac版驱动

    驱动下载地址:http://share.lizhi.in/f/886396-971536579-45475e?p=6212 (访问密码: 6212) 自己不会安装?搞不定?可以购买远程安装服务:  立即购买 HPLaserJet1020Plus激光打印机 惠普1020是HPLaserJet1020Plus激光打印机的简称,惠普1020是由惠普公司生产的一款A4幅面的黑白激光打印机,这款机器作

    2024年02月04日
    浏览(63)
  • win10连接win7共享打印机提示无法连接到打印机

    一、有很多Win10系统用户反馈,在局域网中想要连接Win7共享的打印机无法连接,无法安装的问题,下面和大家分享操作步骤。 步骤1:开启SMB1.0组件 在Win10小娜搜索框,搜索控制面板打开; 来到控制面板,选择查看方式为小图标,然后点击程序和功能; 点击启用或关闭Windo

    2024年02月08日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包