【2013微软校招面试题】求给定的一个字符串最小需要添加多少个字符才能成为回文串

该博客探讨了一道微软2013年校招面试题,内容涉及如何计算给定字符串变成回文串所需的最少字符添加数量。通过动态规划(DP)方法进行解题,详细分析了三种不同情况的解决方案:首尾字符相等、不相等但首字符不匹配任何内部字符、不相等但首字符匹配内部字符的情况。
摘要由CSDN通过智能技术生成

 /*
 *  给一个字符串s,求出需要最少添加多少个字符才能够使其成为回文串。
 *  例如:输入 abc,则需要添加两个字符, abcba, 则输出2;
 *        输入 aabb,则需要添加两个字符,2
 *
 *  解题思路: DP
 *  分类讨论首字符与尾字符
 *         1) 若首尾字符相等,则问题变为求 S[2]~S[len-1] 字符串的解;
 *       
 *         2) 若首尾字符不相等,且首字符不和串内的任一个字符匹配,则在末尾添加一个与首字符
 *             相同的字符,然后解为 1 + S[2]~S[len] 字符串的解
 *
 *         3)  若首尾字符不相等,且首字符和串内的一个字符匹配,则该情况等同于尾字符不和串内字符
 *             匹配,则解为 1 + S[1]~S[len-1] 字符串的解
 *
 */

 

代码如下所示:

 

#include <iostream>
using namespace std;

const int maxn = 1000;  //假定字符串最大长度为1000
const int inf = 10000;  //表示无穷大
char s[maxn];           //存储字符串
int dp[maxn][maxn];     //dp[x][y],x代表长度为x的子字符串,y代表从字符串第几个位置开始

void solve()
{
	int slen 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值