C++给定一个字符串,添加若干字符,使得字符串变为回文字符串,请问怎样能让这个字符串最短?

C++给定一个字符串,添加若干字符,使得字符串变为回文字符串,请问怎样能让这个字符串最短?,第1张

代码如下:

#include <iostream>

#include <cstdlib>

#include <string>

#include <algorithm>

using namespace std

bool IsHW(const string&str)

{

  string s=str

  reverse(s.begin(),s.end())

  return s==str

}

int main()

{

  string str

  while(cin>>str)

  {

      if(str.empty()||str.length()==1)

      {

          cout<<"YES"

      }

      else

      {

          bool ret=false

          string tmp

          int n=str.length()

          for(int i=0i<n++i)

          {

              tmp=str.substr(0,i)+str.substr(i+1)

              //将i位置的字符去掉

              if(IsHW(tmp))

              {

                  ret=true

                  break

              }

          }

          if(ret)

              cout<<"YES"<<endl

          else

              cout<<"NO"<<endl

      }

  }

  return 0

}

扩展资料:

reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数没有返回值

template <class BidirectionalIterator>

void reverse (BidirectionalIterator first, BidirectionalIterator last)

{

  while ((first!=last)&&(first!=--last))

  {

      std::iter_swap (first,last)

      ++first

  }

}

关于这个问题,必须要具体问题具体分析。如果前提是:保证某个非回文字符串通过只要添加一个字母,肯定能够使它变为回文串的话,那么从程序设计的角度上讲,就必然是可以通过编写程序代码的方式实现;但是如果前提是:并不能够保证:对非回文字符串只要添加一个字母,就肯定能够使该串变为回文串的话,那么你无论如何通过程序设计、编写代码的方式,也无法将其变为回文串。

现在的问题就是:并没有一个通用的数学定理能够证明、并保证该结论成立。所以才会有我前面所说的:需要具体问题具体分析。例如如下例子:

对于 ab 字符串,本身不是回文串(反过来是字符串:ba),但是通过在小写字母 b 的后面添加一个小写字母 a,可以使其成为回文串,即:aba(正向、反向内容都相同)

但是对于 abcd 字符串,本身不是回文串(反过来是字符串:dcba),但是无论通过什么方法,都无法做到只添加一个字母,使其成为一个回文串。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11588063.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存