C++ 算法之 第一个只出现一次的字符

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

思路:采用一个数组记录出现的次数然后再遍历该数组:

// Find.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

/*
字符char是一个长度为8的数据类型,因此总共有256种可能,于是我们创建一个长度为256的数组
每个字母根据其ASCII码值作为数组的下标对应数组的一个数字,而数组中存储的是每个字符出现的次数
*/

char FindFirstChar(char* pString)
{
	if(pString == NULL)
		return '\0';

	const int N = 256;
	int b[N];
	for(int i = 0; i < N; ++i)
	{
		b[i] = 0;
	}

	char* p = pString;
	while (*p != '\0')
	{
		b[*(p++)]++;
	}

	p = pString;
	while (*p != '\0')
	{
		if (b[*p] == 1)
		{
			return *p;
		}
		++p;
	}
	return '\0';

}
int _tmain(int argc, _TCHAR* argv[])
{

	char* pString = "abcddeeff";
	char c = FindFirstChar(pString);
	cout<<c<<endl;

	getchar();
	return 0;
}
时间: 2025-01-17 03:37:43

C++ 算法之 第一个只出现一次的字符的相关文章

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

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

编程算法 - 第一个只出现一次的字符 代码(C)

第一个只出现一次的字符 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 在字符串中找出第一个只出现一次的字符. 字符是char类型, 所以匹配256种可能, 采用hash表, 计算出现的次数, 再找到第一次出现的字符. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #i

字符串中第一个只出现一次的字符,如何优化算法使得遍历次数更少?

/** * 只允许遍历一遍字符串 */ public class 找出字符串中第一个只出现一次的字符 { public static void main(String[] args) { // 测试字符串 String str = "asdsacjj"; // 字符串转化成字符 char[] strToChar = str.toCharArray(); int len = strToChar.length;//字符串长度 //hashset用于判断是否出现过 HashSet<Ch

微软算法100题17 字符串中找到第一个只出现一次的字符

第17 题:题目:在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b 思路:要找出只出现一次的字符,很明显需要统计所有字符出现的次数,然后找出次数为一的那一个,统计次数最先想到的是hashTable,但此题有更好的办法,因为每个char其实对应一个唯一的ASCII值,所以可以构造一个包含所有字符ASCII值的int数组,来映射字符与出现次数的关系,同时一个char是8个字节,总共有256个可能,所以该数组的大小应为256 1 package com.rui.micros

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

问题描述:给定一个字符串,假设字符串中只包含字母和数字,求出这个字符串中第一个只出现一次的字符. 分析:这个题目想要做出来还是比较简单的,关键是如何用高效的方法求解.这里我提供两种方法: 解法一:蛮力法.具体思想为,从第一位开始,拿每一位和后面的每一位进行比较,如果没有出现,则直接输出这个字符. 如果出现,则从第二位开始,再和后面的每一位进行比较,依次类推. 算法的时间复杂度为O(n^2). 解法二:哈希法.采用两次扫描即可实现.需要提前构建一个哈希表,把字符当成key值,把出现的次数当成val

【剑指Offer】第一个只出现一次的字符位置

问题描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.位置索引从0开始. 示例: 输入:sabcdsdf 输出:1 算法描述 定义一个52个元素的整型数组aCount,初始化为0,每个字母(大小写)依次对应一个,记录字母出现的次数: 定义一个52个元素的整型数组aPos,初始化为-1,每个字母(大小写)对应一个,记录字母第一次出现的位置: 每次遍历一个到字母,aCount数组里对应字母加1,判断目前aCount数组里该字

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

题目:在一个字符串中找到第一个只出现一次的字符.比如"lavor_zl"第一个只出现一次的字符是'a'. 解题思路: C/C++字符使用Ascii编码,一个字符占一个字节即可以表示2的8次方个数,那么C/C++字符可以表示的256个字符,因此可以用一个256的数组来保存各个字符出现的次数,当然256个字符的Ascii值是0-255之间的所有数,而且'\0'的Ascii值0,所以可以用数组的下标来表示记录的是哪一个字符的个数.然后再遍历一次字符串,找出第一个只出现一次的字符. 算法实现:

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

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27106997 题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1. 样例输入: ABACCDEFF AA 样例输出: 1 -1 处理字符串中重复或者次数出现等问题,最常用的就是哈希表,用字符串中的字符作为key,

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

题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 如输入 abaccdeff,则输出 b. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1 我们这里有两种解题思路 1.蛮力法. 遍历数组,每找到一个字符是遍历一下整个数组,看看该字符是否存在数组下表不一致,但是ASSIC码值一样的字符还存在,如果不存在,则是返回该字符,如果存在,则继续遍历.该算法的时间复杂度为O(n