在一个字符串中找到第一个只出现一次的字符

草草草!!!

在数组的符合某种条件的所有元素中找到的最小的元素。

利用选择排序的原理保存最小元素的索引的方法查找最小值,记得!第一个索引设置成符合要求的元素的索引,不要随便设置成数组的第一个元素的索引。

24 -- 38行代码。 

在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。

(1)不使用额外空间,时间复杂度是O(n^2)

像冒泡排序那样,内存循环对外循环判断,比如第一个a,扫描后续元素,有a则不满足。

(2)哈希表。

k = 0; //填写哈希表时,每次设置成1就++k 
typedef struct {
    int flag;//初始化为0,第一次扫描到设置成1,再扫描到设置成2 
    int order;//初始化266,第几个设置成1的就设置成,几 
};//哈希表的结点

扫描完字符串后,就扫描哈希表:if(flag == 1 && a[ i ].order < 当前最小order索引值 )  就更新索引值。

时间复杂度是: 255 + 255 + n + 255 = O(n)

 1 typedef struct {
 2     int flag;//初始化成0,第一次出现设置成 1,再出现设置成2 
 3     int order; //初始化成0,第几次设置成1,就设置成几 
 4 }Node;
 5 char Search(char *str) {
 6     int k = 0;
 7     if(str == NULL) exit(-1);
 8     Node arr[128];
 9     for(int i = 0;i < 128; ++i) {
10         arr[i].flag = 0;
11         arr[i].order = 200;//任意大于128的整数 
12     }
13     
14     char *p = str;
15     for(;*p!='\0';++p) {
16         if(arr[*p].flag == 0) {
17             arr[*p].flag = 1;
18             arr[*p].order = k++;
19         }
20         else {
21             arr[*p].flag = 2;
22         }
23     }
24     int first;
25     int start = 0;
26     for(int i = 0; i < 128; ++i) {
27         if(start == 0) {
28             if(arr[i].flag == 1) {
29                first = i;
30                start = 1;
31             }
32         }    
33         else {
34             if(arr[i].flag == 1 && arr[i].order < arr[first].order)
35             first = i;
36         }
37     }
38     return first;
39 }

 

转载于:https://www.cnblogs.com/joyeehe/p/7943548.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值