链接:https://ac.nowcoder.com/acm/problem/19909
来源:牛客网
题目描述
假设你有一条长度为5的木版,初始时没有涂过任何颜色。你希望把它的5个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为5的字符串表示这个目标:RGBGR。 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色。
例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标。 用尽量少的涂色次数达到目标。
输入描述:
输入仅一行,包含一个长度为n的字符串,即涂色目标。
字符串中的每个字符都是一个大写字母,不同的字母代表不同颜色,相同的字母代表相同颜色。
输出描述:
仅一行,包含一个数,即最少的涂色次数。
示例1
输入
AAAAA
输出
1
示例2
输入
RGBGR
输出
3
理解
首先当这个区间长度只有1的时候,想得到这样的颜色至少在这个位置上得粉刷一次,所以初始化 d p [ i ] [ i ] = 1 ( 1 ≤ i ≤ n ) dp[i][i] = 1 (1\leq i \leq n) dp[i][i]=1(1≤i≤n)
当区间长度大于等于2时,我们发现:
1.如果区间的两侧颜色相同的话,那么区间两侧可以是刷子涂一次涂的,那么我们可以利用当前长度-1的区间涂得,即 d p [ i ] [ j ] = d p