剑指Offer——(34)第一个只出现一次的字符位置
2017-07-20 11:16
295 查看
题目描述:
在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
实现如下:
在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
实现如下:
//在线测试用例非常的坑。。。→_→ //1.需要返回的是下标 //2.测试用例中区分大小写 //将所有的字符元素存放到<key, value>中,字符元素值为key,自定义结构体indexAndTime为value //indexAndTime中保存此字符第一次出现的下标和一共出现的次数 //最后遍历str,在map中寻找字符元素,判断每一个元素的iAT中的time是否为1,若为1,return firstIndex //注意 //有可能字符中没有只出现一次的字符,所以最后要有return -1! class Solution { public: struct indexAndTime//自定义结构体,记录字符元素第一次出现的下标和次数 { int firstIndex; int time; }; int FirstNotRepeatingChar(string str) { if (str.empty()) return -1;//防御性动作 map<char, indexAndTime> m; for (int i = 0; i < str.length(); ++i) { if (m.find(str[i]) != m.end())//若在map中找到,就直接++time ++(m[str[i]].time); else//若未找到,就添加新的<key, value> { indexAndTime iAT = { i, 1 }; m.insert(make_pair(str[i], iAT)); } } map<char, indexAndTime>::iterator itMap; for (int j = 0; j < str.size(); ++j)//寻找第一个只出现一次的字符的下标 { itMap = m.find(str[j]); if (itMap->second.time == 1)//找到返回下标 return itMap->second.firstIndex; } return -1;//特殊情况,有可能没有出现一次的情况! } };
相关文章推荐
- 《剑指offer》-找到字符串中第一个只出现一次的字符,并返回它的位置
- 剑指offer(三十八)之第一个只出现一次的字符位置
- 剑指Offer - 第一个只出现一次的字符位置
- 第一个 只出现一次的字符 位置(剑指offer)+哈希
- 剑指offer:第一个只出现一次的字符位置
- (C++)剑指offer-34:第一个只出现一次的字符位置(时间空间效率的平衡)
- 剑指offer——寻找字符串中只出现一次的第一个字符位置
- 剑指offer题解 第一个只出现一次的字符位置
- 剑指offer—第一个只出现一次的字符位置
- 《剑指offer》-第一个只出现一次的字符位置
- 剑指offer(31)-第一个只出现一次的字符位置
- 《剑指offer》——第一个只出现一次的字符位置
- 《剑指offer》第一个只出现一次的字符位置
- 剑指Offer—34—第一个只出现一次的字符位置
- 剑指offer 34 第一个只出现一次的字符位置
- IMWeb提升营Day6 | 训练题34:第一个只出现一次的字符
- 剑指offer——第一个只出现一次的字符
- 第一个只出现一次的字符的位置
- 剑指Offer------第一个只出现一次的字符
- 剑指offer面试题目:第一个只出现一次的字符