剑指offer35 第一个只出现一次的字符

class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        if(!str.size())
            return -1;
        int num[256]={0};
        for(int i=0;i<str.size();i++)
        {
            num[str[i]]++;
        }
        int i=0;
        while(i<str.size()&&num[str[i]]!=1)
            i++;
        if(i==str.size())
            return -1;
        else
            return i;
    }
};

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

时间: 2024-12-29 07:20:44

剑指offer35 第一个只出现一次的字符的相关文章

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

https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?tpId=13&tqId=11187&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置 代码

剑指Offer——第一个只出现一次的字符

1.题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 2.代码实现 public class Solution { public int FirstNotRepeatingChar(String str) { if (str == null || str.length() == 0) { return -1; } char[] chars = str.toCharArray(); j

剑指Offer-33.第一个只出现一次的字符(C++/Java)

题目: 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 分析: 遍历字符串,利用Hashmap将每一个字符出现的值存储起来,然后再遍历字符串,返回第一个字符值为1的索引即可. 程序: C++ class Solution { public: int FirstNotRepeatingChar(string str) { for(int i = 0; i < str.size(); ++

剑指Offer33 第一个只出现一次的字符

1 /************************************************************************* 2 > File Name: 33_FirstNotRepeatChar.c 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年09月02日 星期五 13时43分20秒 6 ********************************

剑指Offer--第50题 第一次只出现一次的字符

题目一: 字符串中第一个只出现一次的字符.在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出'b'. 思路 利用数组第一次遍历字符串记录所有字符出现的次数,第二次查找value值为1的为所需要的,这里用数组比较合适,用HashMap会有问题,比如"google",得出的结果会是e,其实应该是l. 按思路写的代码 package solution; public class Solution26 { public static char sho

剑指offer35:第一个只出现一次的字符(hash表使用)

题目:在字符串中找出第一个只出现一次的字符. 分析: 思路一:第一次遍历,从第一个开始,当前字符和以后的字符比较,如何没有相同的,则此字符为所求字符. 此方法可以实现,但时间复杂度很低,为o(n*n) 思路二:(1)只遍历一次,把每种字母对应到一个hash表中 (2)第二次遍历的时候,找到hash中为1的来就是要输出的字母 难点:如何建立hash表那? 我们可知,字符是八位的,我们建立一个256的数组,把每个字符转换为十进制的ascl码,每个字母就对应一个数组位置. #include <iost

剑指OFFER之第一个只出现一次的字符(九度OJ1283)

题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1. 样例输入: ABACCDEFF AA 样例输出: 1 -1 解题思路: 首先考虑到时间复杂度,对字符串进行排序或者双层扫描都会到达O(nlong)---O(n^2)的地步. 所以我们考虑额外使用一个数组进行计数,线性时间扫描数组,然后再按照原来的顺序扫描数组找到次数为

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

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

剑指offer (35) 第一个只出现一次的字符 字符哈希表

题目:在字符串中找出第一个只出现一次的字符 题解分析:用空间换时间,使用哈希表,key为字符,value是该字符出现的次数 字符是一个长度为8的数据类型,因此总共只有256种可能,我们可以创建一个长为256的数组, 每个字符根据其ASCII码值作为数组的下标,即哈希表的key,而相应数组位置存储每个字符出现的次数,即哈希表的value char GetFirstOnce(const char* str) { assert(str != NULL); const int hashSize = 25