您的位置:首页 > Web前端

《剑指offer》-第一个只出现一次的字符位置

2016-06-09 10:34 246 查看


题目描述

在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置。若为空串,返回-1。位置索引从0开始

解法:1.使用哈希表,键为每一个字母(256个值表示),值为出现的次数

           2.两次遍历,第一次统计出现的次数,第二次判断出现次数为1的字母

           3.字符串转到字符的使用c_str()

class Solution {
public:
int FirstNotRepeatingChar(string str) {
if(str.length() == 0) return -1; //如果为空,则返回-1
//使用哈希表,字符对应成键,及数组的下标,值里面存储出现的次数
const int num = 256; //256个字符对应
unsigned int hashMap[num];
int index = 0;
for(int i = 0; i < num; i++) //初始化每个出现次数为0
hashMap[i] = 0;
const char *p = str.c_str(); //返回字符串中的第一个字符位置的指针
while(*p != '\0') {
hashMap[*p]++; //每出现一次就加1
p++; //指向下一个字符位置
}
p = str.c_str(); //重新第二轮扫描开始
while(*p != '\0') {
if(hashMap[*p] == 1)
return index;
++index;
p++;
}
return -1;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: