给定一个字符串,删除字符串里面的回文属性

  1. 比如一个字符串abcdedeth,在字符串中可以看到ded是一个回文字符串,我们编写代码删除一些字符,使得字符串不存在回文属性的子字符串。
  2. (1)算法分析:我们可以充分利用字符串回文的属性,假设abcde是我们处理好的不具备回文属性的字符串。当下一个字母再进来的时候。我们需要怎么处理呢?观察abcde字符串,当来的字母如果和abcde构成回文的的话,那么构成回文只存在两种情况(1)abcdee和(2)adcded。不由回文特性可知,不存在第三种情况。如果存在第三种情况回文。那么加进来的字母必和adcde的abc是一样的。那么意味着de构成回文,与我们的假设存在矛盾。
  3. 经过以上分析,当新来的字符的时候,我们只需要把这个字符和倒数第一个字符和倒数第二个字符做比较即可,相等的时候,不添加。不相等的时候,添加进去即可。
  4. 整体的c++代码如下:
  5. #include
    using namespace std;
    void delaHuiwen(char *str)
    {
    int len = strlen(str);
    char *huiwen = new char[strlen(str)];
    char *temp = huiwen;
    int wei = 0;
    for (int i = 0; i < len; i++)
    {
    if (wei == 0)
    {
    huiwen[wei] = str[i];
    wei++;
    }
    else
    {
    int temp1 = wei - 1;
    if (str[i] == huiwen[temp1])
    {
    continue;
    }
    int temp2 = wei - 2;
    if (temp2 >= 0)
    {
    if (str[i] == huiwen[temp2])
    {
    continue;
    }
    }
    huiwen[wei] = str[i];
    wei++;
    }
    }
    huiwen[wei] = ‘\0’;
    cout << temp << endl;
    }

int main()
{

cout << "-------------Test 1----------------" << endl;
char *ceshi = "abcdedeth";
delaHuiwen(ceshi);
cout <<"-------------Test 2----------------"<<endl;

system("pause");
return 0;

}
当我们处理一些具备特殊属性的变量的时候,应该充分考虑这个变量的属性对于编程效果的影响。有可能就会存在一个比较简单易行的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值