给定一个字符串,去除整个字符串中重复的字符
该题与我前面的一篇博客判断一个字符串是否是唯一的很相似。可以分两种情况来讨论:1、不许使用额外的存储空间;2、可使用额外的存储空间
s表示待处理的字符串,l表示当前非重复字符的个数
1、不许使用额外的存储空间
对每个待处理的字符,可以考虑在后处理和在前处理
在后处理:对每个待处理的字符,假设为c,从该字符的后一个字符开始,直到字符串的末尾,如果有字符与c相同,就将该位置的字符标记为无效,处理完毕后,将c存在到s中的l位置上。
在前处理:对每个待处理的字符,假设为c,将c与s中的第0---(l-1)个字符相比较,如果有相同的,则处理c后面的一个字符;如果没有相同的,就将c存放到s的第l个位置上,然后在处理c后面的一个字符。
上述两种方法中第一种的时间复杂度为O(n*n),第二种的时间负载读为O(k*n),k为不同字符的总数,第二种方法的代码如下:
void removeDuplicateChar(char s[])
{int i, j;int length = strlen(s);if(length < 2)return;int last = 1;/*s[i]每次都是与前last不重复的字符相比较*/for(i = 1; i < length; i++){for(j = 0; j < last; j++){if(s[i] == s[j])break;}if(j == last)s[last++] = s[i];}s[last] = '\0';
}
2、允许使用额外的存储空间
当可以使用额外的存储空间时,若可以使用较大的数组,例如char flag[256],数组中的每一个元素用来标记一个字符,在处理字符串时就先判断它在flag对应位置上的标记是否为0,若是则表示目前该字符还没有出现,因此将其存放在l位置上;反之,不对其作任何的处理。
但如若不能使用这么大的数组,就可以考虑用位表示,例如int flag[8],就可以用来表示256个数,处理的方法与使用char flag[256]是一样的。
当限定了字符的种类时,如在"a---z"之间,使用一个整型变量int flag就可以解决。
void removeDuplicateChar(char s[])
{int i, v;int length = strlen(s);if(length < 2)return;int flag = 0;int last = 0;for(i = 0; i < length; ++i){v = (int)(s[0] - 'a');if((flag & (1 << v)) == 0){s[last++] = s[i];flag |= (1 << v);}}s[last] = '\0';
}
给定一个字符串,去除整个字符串中重复的字符相关推荐
- 重复子字符串(给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。)
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab" 输出: True ...
- 如何删除字符串中重复的字符 用C语言实现
对于我这个小白来说,这方法要实现起来其实挺难的,这个方法是我想了好久才想出来的,如果有哪些不足,欢迎指出,谢谢大家. #include<stdio.h> #include<strin ...
- 经典算法面试题目-设计算法移除字符串中重复的字符(1.3)
题目 Design an algorithm and write code to remove the duplicate characters in a string without using a ...
- 删除字符串中重复的字符
描述 删除字符串中重复的字符 分析 方法一,蛮力法.两个循环,大循环每次从数组中取出一个字符,小循环重新遍历该数组是否含有该字符. 方法二:排序法.对两个字符串的字符进行排序,再比较. 方法三:空间换 ...
- php消除连续字符,JS字符串去除连续或全部重复字符的实例
这篇文章主要介绍了JS字符串去除连续或全部重复字符的实例,需要的朋友可以参考下 js字符串去除连续重复字符 ()和\number 配合使用表示重复正则第number个括号内匹配到的内容,如:(\d)\ ...
- android 去重 比较两个list_android 去重 比较两个list_Android 去除list集合中重复项的几种方法...
因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List li1 = new List { "", "", "" ...
- android 去重 比较两个list_Android 去除list集合中重复项的几种方法
因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List li1 = new List { "", "", "" ...
- 求栈中元素个数算法_Algorithm 大家都会的去除有序数组中重复元素的三种算法...
问题描述 给定一个有序数组,要删除数组重复出现的元素,使得每个元素之出现一次,然后返回移除重复数组后的新长度: 示例: 给定数组 nums = [1,2,4,4],删除重复出现的元素后,原数组变成 n ...
- 去除IntelliJ IDEA中重复代码报灰黄色的下划波浪线
去除IntelliJ IDEA中重复代码报灰黄色的下划波浪线 最近写Java在用IntelliJ IDEA这款传说中的神器IDE,看群里的大神们都在用,也耐不住寂寞想向大神们看齐一下.刚开始用,很多地 ...
- 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3-&g ...
最新文章
- 学python要多少钱-python学习费用多少合适
- linux ls什么意思,linux – 你如何确定bash ls的颜色是什么意思?
- CSDN博客导出备份工具
- Python ID 生成(UUID、自增、19位雪花算法ID)
- 求和(1,2,3.....n使其和为m的所有情况)
- 爬取花瓣网并批量下载图片
- 金蝶服务器存在但无账套信息,金蝶KIS专业版
- 航拍全景拍摄教程,如何制作航拍全景?
- win10如何退出微软账户
- 边境的悍匪—Kaggle—泰坦尼克号生还预测详细教程
- Ubuntu下装memcache
- 生活随记 - 75公斤重 急需减肥
- 汉堡按钮的制作以及其中的问题
- Win10 修改C盘User下的姓名【亲自踩坑】
- 0316复利和单利计算更新4
- vscode在html看到图片的插件_自从用了这款PPT插件,我才知道什么叫做高效办公!...
- 安装pytorch一直报错解决方法!!! ERROR: Exception: Traceback (most recent call last): File “D:\Anacoda\lib\s....
- 实现 外网 远程桌面 连接 个人pc(开机自启动,校园网web自动验证,多用户远程桌面)
- 如何查看GCC编译器版本
- 关于卸载流氓软件的通用办法