赞
踩
题目:给定一个字符串(不含空格,长度小于500),在字符串的前后适当补充若干字符串,使整个字符串形成回文串,那么最少需要补充多少字符,并输出形成的回文串
分别从左右两侧判断回文情况,左侧判断时,每次过滤掉最右侧的字符,如果某次循环判断为回文,则记录本次判断的字符串长度。左右都判断完成后,比较左右两侧哪个回文串更长。字符串长度减去回文串长度即为需要补充的最少字符。
- #include <iostream>
- using namespace std;
-
- bool hw(char *s,int n)
- {
- int i=0;
- int j=n-i-1;
- while(i<j)
- {
- if(s[i] != s[j])
- break;
- i++;
- j--;
- }
- if(i<j)
- return false;
- return true;
- }
-
- int main()
- {
- char s[1000];
- cin>>s;
- int len = strlen(s);
- int n = len;
- int maxlen = 0;
- int flag = 0;
- while(n)
- {
- if(hw(s,n))
- {
- maxlen = n;
- break;
- }
- n--;
- }
- n = len;
- while(n > maxlen)
- {
- if(hw(s+len-n,n))
- {
- maxlen = n;
- flag = 1;
- break;
- }
- n--;
- }
- if(n == 0)
- cout<<len-1;
- else
- {
- cout<<len - maxlen<<endl;
- if(flag == 0)
- {
- for(int i=0;i<len-maxlen;i++)
- {
- cout<<s[len-i-1];
- }
- cout<<s;
- }
- else
- {
- cout<<s;
- for(int i=0;i<len-maxlen;i++)
- {
- cout<<s[len-maxlen-i-1];
- }
- }
- }
- return 0;
- }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。