博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LCS+滚动数组(DP问题)
阅读量:6181 次
发布时间:2019-06-21

本文共 1436 字,大约阅读时间需要 4 分钟。

POJ 1159题意:        回文词是一种对称的字符串。任意给定一个字符串,通过插入若干字符,都可以变成回文词。现在的任务是,求出将给定字符串变成回文词所需要插入的最少字符数。比如:“Ab3bd”插入2个字符后可以变成回文词“dAb3bAd”或“Adb3bdA”,但是插入少于2个的字符无法变成回文词。

[输入]: 第一行:字符串的长度N(3 <= N <= 5000) 第二行:需变成回文词的字符串 [输出]:   将给定字符串变成回文词所需要插入的最少字符数
[样例]: Sample Input   5   Ab3bd
  Sample Output   2
分析: S和S'   (注:S'是S的反串)的最长公共子串其实一定是回文的。这样我们就可以借助lcs来解决该题,即用s的长度减去lcs的值即可。

import java.io.BufferedReader;   import java.io.InputStreamReader;     public class Main {      public static void main(String[] args) throws Exception{       BufferedReader in = new BufferedReader(new InputStreamReader (System.in));       int total = Integer.parseInt(in.readLine());       String string = in.readLine();           System.out.println(total-LCS(string,new StringBuffer(string).reverse().toString()));   }     //返回两个string的lcs的长度   public static int LCS(String str1,String str2){       short length1 = (short)str1.length();       short length2 = (short)str2.length();       short[][]result = new short [2][length2+1];   //滚动数组,节省空间只依赖于前面的两个解        for(int i=1;i<=length1;i++){         for(int j=1;j<=length2;j++){           if(str1.charAt(i-1)==str2.charAt(j-1))            result[i%2][j] = (short)(result[(i-1)%2][j-1]+1);           else           result[i%2][j] = result[(i-1)%2][j]>result[i%2][j-1]?result[(i-1)%2][j]:result[i%2][j-1];           }       }       return result[length1%2][length2];    }            }

转载于:https://www.cnblogs.com/xiaoying1245970347/p/3171227.html

你可能感兴趣的文章
8月不支持 64 位,App 将无法上架 Google Play!需要怎么做?
查看>>
Vs - 基于 d3.js 和 vue.js 的数据可视化
查看>>
优雅地使用loading
查看>>
Node8.0 之 Napi 探秘
查看>>
TypeScript入坑
查看>>
(三)spring cloud微服务分布式云架构-服务网关zuul初级篇
查看>>
Spring Cloud--Honghu Cloud分布式微服务云系统—System系统管理
查看>>
Linux服务器配置——SAMBA
查看>>
我的WP7应用
查看>>
js打开连接 _无需整理
查看>>
我的友情链接
查看>>
C语言结合windowsApi遍历文件
查看>>
linux 系统无法启动的基本解决方法
查看>>
Yii框架学习笔记 [PHP]
查看>>
饿了么MySQL异地多活的数据双向复制经验谈
查看>>
MySQL的btree索引和hash索引的区别
查看>>
计算机基础
查看>>
我的友情链接
查看>>
Hystrix系列-4-Hystrix的动态配置
查看>>
oracle数字函数
查看>>