题目:
有台奇怪的打印机有以下两个特殊要求:
打印机每次只能打印同一个字符序列。
每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符。
给定一个只包含小写英文字母的字符串,你的任务是计算这个打印机打印它需要的最少次数。
思路:
动态规划
上三角矩阵状态变化
从左端递增变化状态
假如递归的左右节点相等,则初始值置 1
从左节点右侧开始,依次判断是否有相同的字符能一起处理
假如处理情况较小则覆盖
代码:
class Solution {
private int[][] dp ;
public int strangePrinter(String s) {
int len = s.length();
dp = new int[len][len];
return Ans(s,0,len-1);
}
public int Ans(String s, int l,int r){
if(l>r) return 0;
if(dp[l][r]==0){
int ans = Ans(s,l+1,r) + 1;
for(int k=l+1;k<=r;k++){
if(s.charAt(k)==s.charAt(l)){
ans = Math.min(ans,Ans(s,l,k-1)+Ans(s,k+1,r));
}
}
dp[l][r] = ans;
}
return dp[l][r];
}
}