一、问题描述

给定一个字符串形的数组,求最小的删除数目,使得删除后的字符串是字典型有序的。

二、思路Code

 package algorithm;

 /**
  * Created by adrian.wu on 2019/2/27.
  */
 public class DeleteColumnsMakeSortedIII {
     /*
         j   i
     b a b c a c
     b b a z b z

     1、i 从前向后遍历
     2、j 从i-1向前遍历
     3、先求A[i]为止,如果使得字符串是sorted的,最少的deletion是多少?最大我们知道是i,即把前面的元素都删了
     4、假如A[j]已经算好,则minDeletion = Math.min(dp[i], dp[j] + i - j - 1),把i和j之间的元素都抠出
     5、如果i和j之间的元素有不抠出的情况怎么办?假定这个位置为k,那么用4的公式 minDeletion = Math.min(dp[i], dp[k] + k - j - 1)
     6、因此重点是当 j < i时,dp[j]要算好。
      */
     public int minSizeDeletion(String[] A) {
         int n = A.length, res = n;
         int[] dp = new int[n];
         for (int i = 0; i < n; i++) {
             dp[i] = i;
             for (int j = i - 1; j >= 0; j--) {
                 if (legal(A, j, i)) {
                     dp[i] = Math.min(dp[i], dp[j] + i - j - 1);
                 }
             }
             res = Math.min(res, dp[i]);
         }
         return res;
     }

     public boolean legal(String[] A, int s, int e) {
         for (String a : A)
             if (a.charAt(s) > a.charAt(e)) return false;
         return true;
     }
 }

(15)DeleteColumnsMakeSortedIII的更多相关文章

  1. 理解 neutron(15):Neutron linux-bridge-agent 创建 linux bridge 的简要过程

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  2. Web 在线文件管理器学习笔记与总结(15)剪切文件夹 (16)删除文件夹

    (15)剪切文件夹 ① 通过rename($oldname,$newname) 函数实现剪切文件夹的操作 ② 需要检测目标文件夹是否存在,如果存在还要检测目标目录中是否存在同名文件夹,如果不存在则剪切 ...

  3. Maven学习系列二(1-5)

    Maven学习系列二(1-5) 本文转自 QuantSeven 博客,讲解精炼易懂,适合入门,链接及截图如下 http://www.cnblogs.com/quanyongan/category/47 ...

  4. C语言的本质(15)——C语言的函数接口入门

    C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返 ...

  5. Windows Phone开发(15):资源

    原文:Windows Phone开发(15):资源 活字印刷术是我国"四大发明"之一,毕昇在发明活字印刷术之后,他很快发现一个问题,随着要印刷资料的不断增加,要用到的汉字数目越来越 ...

  6. Android菜鸟的成长笔记(15)—— Android中的状态保存探究(下)

    原文:Android菜鸟的成长笔记(15)-- Android中的状态保存探究(下) 在上一篇中我们简单了解关于Android中状态保存的过程和原理,这一篇中我们来看一下在系统配置改变的情况下保存数据 ...

  7. MEF框架在Silverlight中应用(15)

    原文:MEF框架在Silverlight中应用(15) MEF框架在Silverlight中应用 代码下载 MEF框架是微软提供的一个插件框架.应用概括为一句话:输入,输出,组合.下面是具体在Silv ...

  8. redis入门(15)redis的数据备份和恢复

    redis入门(15)redis的数据备份和恢复

  9. 理解 neutron(15):Neutron Linux Bridge + VLAN/VXLAN 虚拟网络

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

随机推荐

  1. CF1140E Palindrome-less Arrays

    我觉得这道题非常有前途....... 题意:给定一个填了一半的数组,你要把它补完,使之不存在奇回文串,求方案数.字符集为k. n,k<=20w 解:不能有长为三的回文串.也就是不能有两个相隔1的 ...

  2. 第二十二篇-Guideline基准线

    效果图: 前5个是button填充的,最后一个是线性布局下放置一个button在填充. layout.xml <?xml version="1.0" encoding=&qu ...

  3. struts2 数据转换器

    四.数据类型的转换(明白原理,实际开发中几乎不用) 1.开发中的情况: 实际开发中用户通过浏览器输入的数据都是String或者String[]. String/String[]————填充模型(set ...

  4. mysql 5.7安装准备

    在5.5之后的mysql安装中,需要使用cmake来指定安装参数,下面列出关于cmake的几个常用参数: CMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/loca ...

  5. Druid 数据库连接池

    druid 数据库连接池 由阿里提供 步骤 1 导包 durid1.0.9 jar 包 2 定义配置文件 必须是 properties文件 名字任意 位置也任意 3 获得数据库连接池对象 通过 Dur ...

  6. Python编程快速上手-让繁琐工作自动化-第二章习题及其答案

    Python编程快速上手-让繁琐工作自动化-第二章习题及其答案 1.布尔数据类型的两个值是什么?如何拼写? 答:True和False,使用大写的T和大写的F,其他字母是小写. 2.3个布尔操作符是什么 ...

  7. scp从远程指定目录拷贝文件到本地指定目录

    scp从远程指定目录拷贝文件到本地指定目录 [root@picts ~]# cat /root/scp_pictures.sh #!/bin/bash # Function: copy files f ...

  8. maven坑-Failure to transfer org.apache.maven:maven

    参考网址:http://www.mkyong.com/maven/how-to-convert-maven-java-project-to-support-eclipse-ide/ https://b ...

  9. vue基础篇---vue组件《2》

    定义全局组件 我们通过Vue的component方法来定义一个全局组件. <div id="app"> <!--使用定义好的全局组件--> <coun ...

  10. python Bootstarp框架和inconfont、font-awesome使用

    http://www.bootcss.com/ http://www.runoob.com/bootstrap/bootstrap-panels.html  查找基本的没问题 https://www. ...