第一个只出现一次的字符

在字符串中找出只出现一次的字符。

我们可以使用哈希表结构解决此问题。以哈希表的键值作为字符,对应的出现次数为值。

具体代码如下:

// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
//计算只出现一次的字符

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

char FirstNotRepeatingChar(char* pString){
	if (pString == 0)
		return '\0';
	const int tablesize = 256;
	unsigned int hashTable[tablesize];
	for (unsigned int i = 0; i < tablesize; i++){
		hashTable[i] = 0;
	}
	char *p = pString;
	while (*p != '\0'){
		/*if (!hashTable[*p])
		{
			hashTable[*p] = 1;
		}
		else{
			hashTable[*p]++;
		}*/
		hashTable[*(p++)]++;
	}
	p = pString;
	while (*p != '\0'){
		if (hashTable[*p] == 1){
			return *p;
		}
		p++;
	}
	return '\0';
}
// ====================测试代码====================
void Test(char* pString, char expected)
{
	if (FirstNotRepeatingChar(pString) == expected)
		printf("Test passed.\n");
	else
		printf("Test failed.\n");
}

int _tmain(int argc, _TCHAR* argv[])
{    // 常规输入测试,存在只出现一次的字符
	Test("google", 'l');

	// 常规输入测试,不存在只出现一次的字符
	Test("aabccdbd", '\0');

	// 常规输入测试,所有字符都只出现一次
	Test("abcdefg", 'a');

	// 鲁棒性测试,输入NULL
	Test(NULL, '\0');
	system("pause");
	return 0;
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值