字符串合成
时间限制:5s 空间限制:256MB
题目描述
给定四种对字符串 S 的操作:
(1) push_back( P ):在 S 后连接一个字符串 P,即 S = S + P,代价为| P |;
(2) push_front( P ):在 S 前连接一个字符串 P,即 S = P + S,代价为| P |;
(3) symmetry_back( ):将 S 翻转后连接在 S 之后,即 S = S + rev(S),代价为 1;
(4) symmetry_front( ):将 S 翻转后连接在 S 之前,即 S = rev(S) + S,代价为 1;
给定一个目标串 S,要求你通过上述四种操作,用最少的代价合成出目标串。初始只有一个空串。
输入格式
第一行一个正整数 T,表示数据组数。接下来 T 行,每组数据一行,为字符串 S。
1 <= |S| <= 100000, T <= 10
输出格式
每组数据一行输出一个正整数,Cost表示最少的代价
样例输入
7 c aaaab bbaaaacc ababa abba baab aaabacdbbdcabaaaaaaaaaaaab
样例输出
1 4 7 5 3 3 18 //{} -> c,代价为 1 {} -> aa -> aaaa -> aaaab,代价为 2 + 1 + 1 = 4 {} -> aa -> aaaa -> aaaacc -> bbaaaac,代价为 2 + 1 + 2 + 2 = 7 {} -> ababa,代价为 5 {} -> ab -> abba,代价为 2 + 1 = 3 {} -> ab -> baab,代价为 2 + 1 = 3 {} -> aaa -> aaaaaa -> baaaaaa -> baaaaaaaaaaaab -> aaabacdbbdcabaaaaaaaaaaaab, 代价为 3 + 1 + 1 + 1 + 12 = 18
提示
没有写明提示
题目来源
没有写明来源