怎么把非回文字符串添加最少的字符成为回文字符串
/*回文字符串时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述
所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。
当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。
现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。
输入
第一行给出整数N(0<N<100)
接下来的N行,每行一个字符串,每个字符串长度不超过1000.
输出
每行输出所需添加的最少字符数
样例输入
1
Ab3bd样例输出
2
*/
#include <stdio.h>
#include <string.h>
//int len;//数组长度
//char str[100];//定义数组
typedef struct _Save_Str
{
// int num;
char str[100];
struct string *next;
}Save_Str;//构造存储二叉树数据的结构体
int huiwen(char *str)//判断是否回文
{
int i;
int len = strlen(str);
// len = strlen(str);
for(i = 0; i < len/2; ++i)
if(str[i] != str[len -i -1])
return 0;//不是回文返回0
return 1; //回文返回1
}
int add_af(char *str, int num)//从后面加。。。str表示字符串首地址,num表示从前面数第几个字符不同
{
int len = strlen(str);
int i;
for(i = 0; i < num; ++i)
str[len - i] = str[len -i -1];
str[len - num] = str[num];
str[++len] = '\0';
return len;//返回字符串的长度
}
int add_bf(char *str, int num)//从前面加。。str表示字符串首地址,num表示从前面数第几个字符不同
{
int i, len = strlen(str);
for(i = 0; i < (len - num); ++i)
str[len - i] = str[len -i -1];
str[num] = str[len - num];
str[++len] = '\0';
return len;//返回字符串的长度
}
void main(void)
{
/*这里应该要用二叉树的知识,但我不懂,期待高手支招*/
}
对这个问题我的想法是这样的:
要把一个非回文字符串变成一个回文字符串,无非是找到不同的,从前面加一个字母,或者后面加一个字母
这两个函数我都写好了,现在就差把他们组合起来,菜鸟级的我不懂