给定一个字符串,删除字符串里面的回文属性
程序员文章站
2022-05-24 11:29:37
...
- 比如一个字符串abcdedeth,在字符串中可以看到ded是一个回文字符串,我们编写代码删除一些字符,使得字符串不存在回文属性的子字符串。
- (1)算法分析:我们可以充分利用字符串回文的属性,假设abcde是我们处理好的不具备回文属性的字符串。当下一个字母再进来的时候。我们需要怎么处理呢?观察abcde字符串,当来的字母如果和abcde构成回文的的话,那么构成回文只存在两种情况(1)abcdee和(2)adcded。不由回文特性可知,不存在第三种情况。如果存在第三种情况回文。那么加进来的字母必和adcde的abc是一样的。那么意味着de构成回文,与我们的假设存在矛盾。
- 经过以上分析,当新来的字符的时候,我们只需要把这个字符和倒数第一个字符和倒数第二个字符做比较即可,相等的时候,不添加。不相等的时候,添加进去即可。
- 整体的c++代码如下:
- #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;
}
当我们处理一些具备特殊属性的变量的时候,应该充分考虑这个变量的属性对于编程效果的影响。有可能就会存在一个比较简单易行的方法。