您的位置:首页 > Web前端

《剑指offer》——第一个只出现一次的字符

2016-01-18 19:39 447 查看
题目:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置。若为空串或不存在只出现一次的字符,返回-1。

/*
时间复杂度为O(n),空间复杂度为O(1)
*/
int FirstNotRepeatingChar(string str)
{
if(str.length() == 0)//输入空串,返回-1
return -1;
const int tableSize = 256;//字符是一个长度为8的数据类型,总共有256种可能
unsigned int hashTable[tableSize];//建立一个键为字符,值为整数的hashTable
for(unsigned int i = 0; i < tableSize; i++)//初始化hashTable中所有的值为0
hashTable[i] = 0;
for(int i = 0; i < str.length(); i++)//遍历字符串,更新hashTable的值
hashTable[str[i]]++;
int pos = -1;
for(int i = 0; i < str.length(); i++)//再次遍历字符串
{
if(hashTable[str[i]] == 1)//如果hashTable中对应键的值为1,记录下该字符的位置
{
pos = i;
break;
}
}
return pos;//返回位置
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: