题目链接:http://www.topcoder.com/stat?c=problem_statement&pm=10380&rd=13747
思路:经典的dp
dp[i][j]表示str[i]到str[j]这个字符串变成回文需要的最少操作
当i==j的时候,显然不要操作 dp[i][i]=0
当str[i]==str[j]的时候 根据回文的性质,可以想成把首尾字符去掉,取dp[i+1][j-1]与之比较
当str[i]!=str[j]的时候 还有一种方法是将str[i]变成str[j]或者相反,则取dp[i+1][j-1]与之比较
还有操作就是插入和删除操作(插入一个,相当于删除对应的另一个,所以知道考虑删除即可)
删除首字母时取dp[i+1][j]+1
删除尾字母时取dp[i][j-1]+1
最后对交换的操作,由于题目限制最多进行一次,所以通过枚举所有的交换后的情况就可以
预处理:如果给定的str已经是回文,则不用操作