IDI Open 2016 H 字符串模拟题

H - Palindrome Names

题意:给定一个字符串,每次可以向末尾添加一个字符或者更改一个字符。求使得字符串为回文串(从前往后和从后往前读一样)所花费的最小步数。

题解: 看来需要多思考啊!题目并不难,应该是见得少。先写个思路。

想让它变成回文串,那么可以向后面添加也可以更改其中一个元素。可以这样想,我在后面添加一个字符,那么我需要判断添加后还有几个不匹配,最小步数就是不匹配的个数+1。我要是就修改,最小步数就是不匹配的个数。 我需要从这两种操作中选择最小的就是答案。关键在于我添加一个字符后判断有几个不匹配的。 既然回文,说明把它倒过来写是一样的,这时添加一个字符看匹配个数就可以理解为把字符倒过来移动一位匹配个数,比如:

                              abcdefgded      把他倒过来挪一位:

                                   dedgfedcba

这样做的意思就是我在字符串后面添加一位,这一位必然要和前面第一位‘a'相同,那么剩下的再看有多少不匹配的加起来就是我这个操作需要的步数。我添加两位就是:

                                  abcdefgded 

                                       dedgfedcba

也就是字符串前两个'ab'一定匹配,再看剩下对应为不匹配的个数。以此类推。。。

其实,就像学长所说,最多操作步数就是字符串长度len/2.。。。跟它比较就行了。

posted @ 2017-07-28 10:50  ╰追憶似水年華ぃ╮  阅读(245)  评论(0编辑  收藏  举报