寻找第一个出现两次的字符

解法1: O(n^2)的效率。也就是最简单的两重循环。

解法2: 更好也更多被采用的,hash方法。定义一个256的数组就可以了。

例如:“abcadfgrtybh”

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 int main()
 5 {
 6     char str[64] = "abcadfgrtybh";
 7     char ch;
 8     int i,j;
 9     for(i = 0;i < strlen(str);++i)
10     {
11         ch = str[i];
12         for(j = i+1;j < strlen(str);++j)
13         {
14             if(ch == str[j])
15             {
16                 printf("%c",str[i]);
17                 i = strlen(str);
18                 break;
19             }
20         }
21     }
22 }

解法二的代码可以参见剑指Offer的“寻找第一个出现一次的字符”,得

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 int main()
 5 {
 6     char str[64] = "qywyer23tdd";
 7     int hash[256];
 8     int i,j;
 9     for(i = 0;i < 256;++i)
10     {
11         hash[i] = 0;
12     }
13     for(j = 0;j < strlen(str);++j)
14     {
15         ++hash[str[j]];
16     }
17     for(i = 0;i < strlen(str);++i)
18     {
19         if(hash[str[i]] == 2)
20         {
21             printf("%c",str[i]);
22             break;
23         }
24     }
25 }

时间: 2024-11-04 16:34:42

寻找第一个出现两次的字符的相关文章

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

在字符串中,寻找第一个只出现一次的字符,如str="abddggdbacdd", 结果是c 三种方法: 1. 使用字符字典数组,每个元素是一个结构体,第一个字段记录字符出现的次数,第二个字段记录该字符在字符串中第一次出现的位置, 先遍历一遍字符串,对字符字典数组赋值,然后遍历一遍字符字典数组,找到第一个字段为1,且位置最小的字符即为需要寻找的字符.如下: struct node{ int num; //出现次数 int index; //首次出现的位置 }; char str[1000

编程之美2.12 高速寻找满足条件的两个数

  这道题目的意思是,在一个数组中寻找两个数.使这两个数的和等于给定的数(找到随意一组就能够了).       题目读完之后,感觉这道题目还是非常easy的.就是遍历数组呗,走两遍,即能够在O(n2)时间复杂度内解决问题. 只是,细致想想之后.复杂度还是能够减少的.       首先,我们能够对数组进行排序,这样,得到的数组就是一个有序数组(如果数组是递增的).那么,我们能够利用两个指针.一个指针指向数组的第一个元素,一个指针指向数组的最后一个元素.所以,就是两个指针分别指向两个最值.然后前后每

41. First Missing Positive【leetcode】寻找第一个丢失的整数,java,算法

41. First Missing Positive Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] return 3,and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. 题目:寻找第一个丢失的整数意思为[1,2,4,5,

快速寻找满足条件的两个数

时间:2014.07.17 地点:基地 ------------------------------------------------------------------------------------- 一.问题描述 给定一个数组,要求快速查找出其中的两个值,他们的和为一个给定的值. 比如给定数组:1 4 5 6 8  9,和给定值9,我们能找出4+5=9为所要的数值 ------------------------------------------------------------

第2章 数字之魅——快速寻找满足条件的两个数

快速寻找满足条件的两个数 问题描述 能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的数字,为了简化起见,我们假设这个数组中肯定存在这样一组或以上符合要求的解. 分析与解法 [解法一] 代码如下: 1 package chapter2shuzizhimei.findtwonumber; 2 /** 3 * 快速寻找满足条件的两个数 4 * [解法一] 5 * @author DELL 6 * 7 */ 8 public class FindTowNumber1 { 9 //定义一个

找出字符串中第一个出现次数最多的字符

找出字符串中第一个出现次数最多的字符 详细描述: 接口说明 原型: bool FindChar(char* pInputString, char* pChar); 输入参数: char* pInputString:字符串 输出参数(指针指向的内存区域保证有效): char* pChar:出现次数最多的字符 返回值: false 异常失败 true  输出成功 #include <iostream> #include <string.h> using namespace std; b

《Python CookBook2》 第一章 文本 - 每次处理一个字符 &amp;&amp; 字符和字符值之间的转换

文本 - 总结: 什么是文本Python 中的string 类型是不可变类型.文本,一个字符的矩阵,每一个单独的文本快可以被缩进和组织起来. 基本的文本操作①解析数据并将数据放入程序内部的结构中:②将数据以某种方式转化为另一种相似的形式,数据本身发生了改变:③生成全新的数据 每次处理一个字符: 任务用每次处理一个字符的方式处理字符串. 解决方案可以创建一个列表,列表的子项是字符串的字符.代码如下: >>> thelist = list('thestring') >>>

(算法)字符串中首先出现两次的字符

题目: 给定一个字符串,请写一段代码找出这个字符串中首先出现两次的那个字符. 例如字符串为"qywyer23tdd",输出为y. 思路: 1.从头到尾遍历字符串str,如果str[i]为首先出现两次的字符,则满足的条件是str[i]==str[j](0<=j<i); 2.遍历字符串时,通过类似hash数组来统计字符出现的次数,由于char字符有256个,为0-255,所以需创建一个256大小的数组,即int A[256]. 代码: char firstCharAppearT

第一个出现一次的字符

通过hash表.stl不存在hash容器,自己创建一个,共有256个字符,很简单就创建出来了 代码: #include<iostream> //第一个出现一次的字符 using namespace std; char findChar(char * pString){ if(pString == NULL) return '\0'; const int tableSize = 256; unsigned int hashTable[tableSize] ; for(int i =0;i<