第一次只出现一次的字符

题目:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’。

思路1:遍历,也就是从头开始取字符串中的一个字符,将其与其后的所有字符比较,如果有相同的字符,那么就证明它不是只出现一次的字符。当第一次出现遍历完其后字符并且没有重复时,表明这个字符就是“第一个只出现一次的字符”。

思路2:我们可以定义哈希表的键值(Key)是字符的ASCII值,而值(Value)是该字符出现的次数。同时我们需要扫描两次字符串,第一次扫描字符串时,每扫描到一个字符就在哈希表的对应项中把次数加1。接下来第二次扫描的时候,没扫描到一个字符就能在哈希表中得到该字符出现的次数。找出第一个Value为1的那个key就是我们需要找到那个字符。

 1 #include <string>
 2 #include "stdafx.h"
 3
 4 char FirstNotRepeatingChar(char* pString)
 5 {
 6      if(pString == NULL)
 7          return ‘\0‘;
 8
 9      const int tableSize = 256;
10      unsigned int hashTable[tableSize];
11      for(unsigned int i = 0;i < tableSize ; ++i)
12          hashTable[i] = 0;
13
14      char* pHashKey = pString;
15      while(*pHashKey != ‘\0‘)
16          hashTable[*(pHashKey++)] ++;
17
18      pHashKey = pString;
19      while(*pHashKey != ‘\0‘)
20      {
21          if(hashTable[*pHashKey] == 1)
22              return *pHashKey;
23
24          pHashKey ++ ;
25      }
26
27      return ‘\0‘;
28  }
29
30
31 int main()
32 {
33
34     char* pString = "google";
35     printf("%c\n", FirstNotRepeatingChar(pString));
36
37     pString = "abcdefg";
38     printf("%c\n", FirstNotRepeatingChar(pString));
39
40     return 0;
41 }

时间: 2024-08-01 22:44:36

第一次只出现一次的字符的相关文章

C++求字符串第一次只出现一次的字符

//求字符串中第一次只出现一次的字符. #include <iostream> #include <string.h> #define _SIZE_ 255 using namespace std; struct Node { int index;//存储下标. int num;//存储个数. Node() :index(-1), num(0){} }; char Grial(char *str) { Node node[_SIZE_];//如果只考虑26个字符就不需要这么多空间.

【剑指offer】50、第一次只出现一次的字符

题目一 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 思路 用哈希表来统计每个字符出现的次数,第一次扫描统计时间复杂度为O(n),找出第一个只出现一次的字符时间复杂度为O(1) class Solution { public: int FirstNotRepeatingChar(string str) { map<char, int> mp; for(int i = 0; i

剑指Offer--第50题 第一次只出现一次的字符

题目一: 字符串中第一个只出现一次的字符.在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出'b'. 思路 利用数组第一次遍历字符串记录所有字符出现的次数,第二次查找value值为1的为所需要的,这里用数组比较合适,用HashMap会有问题,比如"google",得出的结果会是e,其实应该是l. 按思路写的代码 package solution; public class Solution26 { public static char sho

解题报告——第一次只出现一次的字符

题目:在一个字符串(1<=字符串长度<=10000,全部有字母组成)中找到第一个出现一次的字符的位置.若为空串,返回-1. 思路:简单的哈希问题,char占一个字节,8位,最多表示256种字符.时间复杂度O(n),空间复杂度O(1),因为hash数组大小为常数256.只需要遍历一次字符串,然后遍历一次hash数组即可. 我的代码如下: class Solution { public: int FirstNotRepeatingChar(string str) { if(str.length()

第一次只出现1次的字符

1. 其实就是map  (key,value) class Solution { public: int FirstNotRepeatingChar(string str) { map<char, int> mp; for(int i = 0; i < str.size(); ++i) mp[str[i]]++; for(int i = 0; i < str.size(); ++i){ if(mp[str[i]]==1) return i; } return -1; } }; 原文

经典算法学习——第一个只出现一次的字符

这同样是剑指Offer中的很经典的一道面试题.题目描述为:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出'b'.  一开始大家就会想到最简单的方法就是每访问到一个字符的时候,与后面的每一个字符去进行比较,若没有发现相同的元素,那么该元素就是第一个只出现一次的字符.这样的复杂度为O(n^2).   显然这样的效率不高. 这道题的大方向就是一题查找算法,常见的查找算法为顺序查找,二分查找,哈希查找.比较适合这道题的是哈希查找.首先我们可以建立一个256长度的数组

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

Java Map接口提供了将Key映射到值的对象,HashMap  TreeMap 方法 功能 put(K key ,V value) 向集合中添加指定key ,value的映射关系 containsKey(Object key) 查看是否包含指定key的映射关系,返回true containsValue(Object value) 此映射将一个或多个key映射到指定的value值,返回true get( Object key) 返回指定key的value值,否则返回null keySet()

剑指offer-第五章优化时间和空间效率(在字符串中第一次出现切只出现一次的字符)

题目:在字符串中第一次出现切只出现一次的字符 思路:用HashMap来存放对应的char值和该char出现的次数.做一次变量就可以得到第一个只出现一次的字符. Java代码: import java.util.LinkedHashMap; //思路:用HashMap来存放对应的char值和该char出现的次数.做一次变量就可以得到第一个只出现一次的字符. public class FirstNotRepeatingChar { public Character firstNotRepeating

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

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