如何删除字符串中重复元素

1.将字符串中所有的重复元素的字符删除,只留下出现一次的字符

C语言是实现这个算法的过程有很多,比如说暴力拆解,新申请数组等等
今天小编给大家主要说说如何新申请数组简单理解这个算法
首先这个数组长度是不确定的,并且中每个元素出现的次数很多很乱,如果但纯的遍历一遍数组就像排序一样,很容易出错,小编暴力拆解这个数组的时候首先数组移动真的是很麻烦而且这个元素重复出现基数次和偶数次是不一样的,所以说我就换了个算法。
首先我们需要一个动态整型数组和动态字符型数组,整型数组来记录没每个字符出现的次数,让这个出现的次数为1的时候将这个字符存放到新申请的动态数组中,用一个值来记录动态新字符型数组的长度,最后在新申请的数组末尾加上**’\0’**,这样一个新的数组就诞生了。
来看源码
#include"common.h"
//要求返回无重复字母数组
char* DeletePubChar(char* p)
{
int sz = (int)strlen§;//3
char* q = (char*)malloc(sizeof(char)(sz+1));//多申请一个内存空间存放‘\0’
int
arr = (int*)malloc(sizeof(int)*sz);
memset(arr,0,sizeof(int)sz);
int i = 0;
int j = 0;
int k = 0;
for (i = 0; i < sz; ++i)
{
for (j = 0; j < sz; ++j)
{
if (p[i] == p[j])
arr[i] += 1;
}
if (arr[i] <= 1)
{
q[k] = p[i];
k++;
}
}
q[k + 1] = ‘\0’;
return q;
}
int main()
{
char arr[] = “abbascxxxx”;
char
pp = DeletePubChar(arr);
printf("%s", pp);
system(“pause”);
return 0;
}

这样实现肯定时间空间复杂度是比暴力拆解高的,但是就是说稳定性很好。聪明的你有没有看明白你呢?

发布了33 篇原创文章 · 获赞 13 · 访问量 2483

猜你喜欢

转载自blog.csdn.net/flf1234567898/article/details/104637436