按顺序输出字符串中的唯一字符
来源:互联网 发布:泸州市网络问政 编辑:程序博客网 时间:2024/06/04 00:43
例子:
input: "Hello world";output: "Hewrd";input: "Microsoft Google Oracle";output: "MisftGgOa";
方法一:双层循环,时间复杂度O(n2) 。
这种方法好理解,两层循环做嵌套,对字符串中的每个字符逐个比较,这种方法简单是简单,但是时间复杂度相对较高。
方法二:两次循环,时间复杂度O(n) 。
这种方法主要思路是对字符串中的字符进行计数统计,比如做一个长度为52(大小写字母共52个)的整型数组。数组的下标可以根据字符的ASCII码确定,数组本身存储字符出现的次数。
统计完了,然后再遍历一遍原字符串(因为人家要原始顺序),次数为1的弄出来,大于1的,略过。
这就是遍历两次,但最终时间复杂度仍为
方法三:时间复杂度O(n) ,但只用一次循环。
建立两个数组count[]
,index[]
,大小都是256。其中count[]
还是做字符计数的,index[]
则是做索引的。
想法大致是这样,首先还是依次遍历字符串中的字符,并在count[]
中做计数,如果count[i]=1
,那么index[i]
就记录下该字符在元字符串中出现的位置。如果count[i]=2
,那么就将index[i]
移除。
最后呢对index[i]
所指示的下标从小到大做输出就行了,注意,因为index
的大小是确定的,所以这一步的时间复杂度是
代码实现如下:
#include <iostream>using namespace std;const int MAX_CHAR = 256;void printDistinct(string str){ int n = str.length(); int count[MAX_CHAR]; int index[MAX_CHAR]; for (int i = 0; i < MAX_CHAR; i++) { count[i] = 0; index[i] = n; } for (int i = 0; i < n; i++) { char x = str[i]; ++count[x]; if (count[x] == 1 && x != ' ') index[x] = i; if (count[x] == 2) index[x] = n; } sort(index, index + MAX_CHAR); for (int i = 0; i < MAX_CHAR && index[i] != n; i++) cout << str[index[i]];}int main(){ string str = "Microsoft Google Oracle"; printDistinct(str); return 0;}
阅读全文
0 0
- 按顺序输出字符串中的唯一字符
- 字符串中的字符是否唯一
- 字符串中的字符是否唯一(
- 判断字符串中的字符是否唯一
- 判断字符串中的字符是否唯一
- 判断一个字符串中的字符是否唯一
- 判断一个字符串中的字符是否唯一
- 判断一个字符串中的字符是否唯一
- 判断一个字符串中的字符是否唯一
- 颠倒字符串中的字符顺序
- 输出字符串中的中文字符
- 华为:输入一个字符串,删除重复前面的字符,其余字符按原样顺序输出
- 面试题——字符串中的字符是否唯一
- 字符串中的字符是否都是唯一的,未重复的
- 如何判断一个字符串中的字符是否唯一
- Arrays_Strings 判断字符串中的字符是否唯一@CareerCup
- java 判断一个字符串中的字符是否唯一
- cc150:判断一个字符串中的字符是否唯一
- 用Canvas画带动画的渐变数字圆环
- 2017.5.27 毕设论文完成后的一个星期
- [HTML 5] 辐射式伞状网页背景特效代码下载与使用
- 键盘回车事件导致页面刷新的问题
- 文章标题
- 按顺序输出字符串中的唯一字符
- Python3.0+学习记录-字典
- matlab 图像处理--高斯滤波器
- 反射的简单介绍
- Spring3.X jdk8 java.lang.IllegalArgumentException
- Go标准容器之List
- 驱动添加设备节点/sys/class/
- hdu1869—六度分离(floyed)
- C#知识点