第十七题(找出字符串中第一个只出现一次的字符)

原创 2014年06月20日 16:52:17

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

o(n^2)时间复杂度的方法比较简单,遍历每一个字符,将其和后面的每个字符进行比较,若没有相同的,那么这个字符就是要寻找的字符。

要实现更低阶的时间复杂度,我们可以采用空间换时间的思想,采用哈希表解决这个问题。利用一次循环统计每个字符出现的次数,然后找出出现次数为1的字符即可,哈希表的键为字符,值为字符对应的出现次数。

这里给出分别用stl的unordered_map和自定义哈希表的实现的代码:

#include<unordered_map>
#include<iostream>
using namespace std;
namespace MS100P_17
{
	//采用stl的unordered_map
	unordered_map<char,int>	charMap;
	char firstSingle(char* str)
	{
		int length = strlen(str);
		for (int i = 0; i < length; i++)
			charMap[str[i]]++;
		for (int i = 0; i < length;i++)
		if (charMap[str[i]] == 1)
			return str[i];
		return '\0';		//未找到
	}

	char firstSingle2(char* str)
	{
		int hash[256];
		memset(hash, 0, 256*sizeof(int));
		for (int i = 0; i < strlen(str); i++)
			hash[str[i]]++;
		for (int i = 0; i < strlen(str);i++)
		if (hash[str[i]] == 1)
			return str[i];
		return '\0';		//未找到
	}

	void test()
	{
		char str[] = "abaccdeff";
		cout << firstSingle(str) << endl;
		cout << firstSingle2(str) << endl;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	MS100P_17::test();
	return 0;
}


只允许遍历一遍字符串,找出字符串中第一个只出现一次的字符

find the first unique character in  a string and you can just traverse this string only one time. if...
  • zzran
  • zzran
  • 2013年01月16日 10:21
  • 9698

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

/************************************************************************/ /* 找出字符串中第一个只出现一次的字符 详细描述...
  • liuyi1207164339
  • liuyi1207164339
  • 2016年02月25日 20:51
  • 1506

《剑指Offer》面试题:找到第一个只出现一次的字符

题目描述如下: 题目描述: 在一个字符串(1
  • u010412719
  • u010412719
  • 2015年08月29日 10:42
  • 1079

剑指offer----字符流中第一个不重复的字符----java实现

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一...
  • snow_7
  • snow_7
  • 2016年07月17日 21:17
  • 1135

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

2.【附加题】–查找一个字符串中第一个只出现两次的字符。 比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1) 解法: 利用哈希表;由...
  • gogogo_sky
  • gogogo_sky
  • 2017年07月20日 17:52
  • 266

[剑指Offer]面试题35:第一个只出现一次的字符

题目给定一个字符串,求第一个不重复的字符 abbcad -> c解题思路:今天中午面试的时候第二题我的思路是从头开始扫描字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较。如果...
  • CodeEmperor
  • CodeEmperor
  • 2016年03月19日 10:23
  • 1154

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

题目:在一个字符串中找到第一个只出现一次的字符。如输入:abcdab,则输出:c。 分析:看到这道题时,有两种思路: (1)最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时...
  • yanxiaolx
  • yanxiaolx
  • 2016年06月02日 22:47
  • 1543

【C语言】找出一个字符串中第一个只出现一次的字符

题目描述:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 分析:这道题是2006年google的一道笔试题。 方法一:     简单粗暴的遍历完成,只适用于字符串较...
  • sofia_m
  • sofia_m
  • 2017年11月12日 17:58
  • 181

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

题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b.   分析:这道题是2006年google的一道笔试题。   看到这道题时,最直观的想法是从头开始扫描这...
  • qq991029781
  • qq991029781
  • 2015年03月31日 16:14
  • 1456

最后一个字符 : 找出只出现一次的第一个字符

试题来源:http://www.nowcoder.com/test/151724/begin正在挑战一个CrackMe的你,把需要填写的前面几位密码都正确猜出了,可是这最后一位密码,好像藏得有点深。C...
  • quzhongxin
  • quzhongxin
  • 2015年08月13日 16:46
  • 1361
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第十七题(找出字符串中第一个只出现一次的字符)
举报原因:
原因补充:

(最多只允许输入30个字)