题意:给定一个字符串,每次可以向末尾添加一个字符或者更改一个字符。求使得字符串为回文串(从前往后和从后往前读一样)所花费的最小步数。
题解: 看来需要多思考啊!题目并不难,应该是见得少。先写个思路。
想让它变成回文串,那么可以向后面添加也可以更改其中一个元素。可以这样想,我在后面添加一个字符,那么我需要判断添加后还有几个不匹配,最小步数就是不匹配的个数+1。我要是就修改,最小步数就是不匹配的个数。 我需要从这两种操作中选择最小的就是答案。关键在于我添加一个字符后判断有几个不匹配的。 既然回文,说明把它倒过来写是一样的,这时添加一个字符看匹配个数就可以理解为把字符倒过来移动一位匹配个数,比如:
abcdefgded 把他倒过来挪一位:
dedgfedcba
这样做的意思就是我在字符串后面添加一位,这一位必然要和前面第一位‘a'相同,那么剩下的再看有多少不匹配的加起来就是我这个操作需要的步数。我添加两位就是:
abcdefgded
dedgfedcba
也就是字符串前两个'ab'一定匹配,再看剩下对应为不匹配的个数。以此类推。。。
其实,就像学长所说,最多操作步数就是字符串长度len/2.。。。跟它比较就行了。