当前位置:   article > 正文

C++ 回文制造机:给定字符串形成最短回文串_c语言给字符串补上最少的字符使其变成回文字符串

c语言给字符串补上最少的字符使其变成回文字符串

题目:给定一个字符串(不含空格,长度小于500),在字符串的前后适当补充若干字符串,使整个字符串形成回文串,那么最少需要补充多少字符,并输出形成的回文串

分别从左右两侧判断回文情况,左侧判断时,每次过滤掉最右侧的字符,如果某次循环判断为回文,则记录本次判断的字符串长度。左右都判断完成后,比较左右两侧哪个回文串更长。字符串长度减去回文串长度即为需要补充的最少字符。

  1. #include <iostream>
  2. using namespace std;
  3. bool hw(char *s,int n)
  4. {
  5. int i=0;
  6. int j=n-i-1;
  7. while(i<j)
  8. {
  9. if(s[i] != s[j])
  10. break;
  11. i++;
  12. j--;
  13. }
  14. if(i<j)
  15. return false;
  16. return true;
  17. }
  18. int main()
  19. {
  20. char s[1000];
  21. cin>>s;
  22. int len = strlen(s);
  23. int n = len;
  24. int maxlen = 0;
  25. int flag = 0;
  26. while(n)
  27. {
  28. if(hw(s,n))
  29. {
  30. maxlen = n;
  31. break;
  32. }
  33. n--;
  34. }
  35. n = len;
  36. while(n > maxlen)
  37. {
  38. if(hw(s+len-n,n))
  39. {
  40. maxlen = n;
  41. flag = 1;
  42. break;
  43. }
  44. n--;
  45. }
  46. if(n == 0)
  47. cout<<len-1;
  48. else
  49. {
  50. cout<<len - maxlen<<endl;
  51. if(flag == 0)
  52. {
  53. for(int i=0;i<len-maxlen;i++)
  54. {
  55. cout<<s[len-i-1];
  56. }
  57. cout<<s;
  58. }
  59. else
  60. {
  61. cout<<s;
  62. for(int i=0;i<len-maxlen;i++)
  63. {
  64. cout<<s[len-maxlen-i-1];
  65. }
  66. }
  67. }
  68. return 0;
  69. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/660221
推荐阅读
相关标签
  

闽ICP备14008679号