解题报告——第一次只出现一次的字符

题目:在一个字符串(1<=字符串长度<=10000,全部有字母组成)中找到第一个出现一次的字符的位置。若为空串,返回-1

思路:简单的哈希问题,char占一个字节,8位,最多表示256种字符。时间复杂度O(n),空间复杂度O(1),因为hash数组大小为常数256。只需要遍历一次字符串,然后遍历一次hash数组即可。

我的代码如下:

class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        if(str.length()==0)
            return -1;
        int hash[256]={0};
        int i=0;
        while(str[i]!='\0'){
            hash[str[i]]++;
            ++i;
        }
        i=0;
        while(str[i]!='\0'){
            if(1==hash[str[i]])
                return i;
            ++i;
        }
        return -1;
    }
};

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 00:39:41

解题报告——第一次只出现一次的字符的相关文章

C++求字符串第一次只出现一次的字符

//求字符串中第一次只出现一次的字符. #include <iostream> #include <string.h> #define _SIZE_ 255 using namespace std; struct Node { int index;//存储下标. int num;//存储个数. Node() :index(-1), num(0){} }; char Grial(char *str) { Node node[_SIZE_];//如果只考虑26个字符就不需要这么多空间.

第一次只出现一次的字符

题目:在字符串中找出第一个只出现一次的字符.如输入“abaccdeff”,则输出‘b’. 思路1:遍历,也就是从头开始取字符串中的一个字符,将其与其后的所有字符比较,如果有相同的字符,那么就证明它不是只出现一次的字符.当第一次出现遍历完其后字符并且没有重复时,表明这个字符就是“第一个只出现一次的字符”. 思路2:我们可以定义哈希表的键值(Key)是字符的ASCII值,而值(Value)是该字符出现的次数.同时我们需要扫描两次字符串,第一次扫描字符串时,每扫描到一个字符就在哈希表的对应项中把次数加

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

题目一 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 思路 用哈希表来统计每个字符出现的次数,第一次扫描统计时间复杂度为O(n),找出第一个只出现一次的字符时间复杂度为O(1) class Solution { public: int FirstNotRepeatingChar(string str) { map<char, int> mp; for(int i = 0; i

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

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

第一次只出现1次的字符

1. 其实就是map  (key,value) class Solution { public: int FirstNotRepeatingChar(string str) { map<char, int> mp; for(int i = 0; i < str.size(); ++i) mp[str[i]]++; for(int i = 0; i < str.size(); ++i){ if(mp[str[i]]==1) return i; } return -1; } }; 原文

经典算法学习——第一个只出现一次的字符

这同样是剑指Offer中的很经典的一道面试题.题目描述为:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出'b'.  一开始大家就会想到最简单的方法就是每访问到一个字符的时候,与后面的每一个字符去进行比较,若没有发现相同的元素,那么该元素就是第一个只出现一次的字符.这样的复杂度为O(n^2).   显然这样的效率不高. 这道题的大方向就是一题查找算法,常见的查找算法为顺序查找,二分查找,哈希查找.比较适合这道题的是哈希查找.首先我们可以建立一个256长度的数组

查找字符串中第一个只出现一次的字符

Java Map接口提供了将Key映射到值的对象,HashMap  TreeMap 方法 功能 put(K key ,V value) 向集合中添加指定key ,value的映射关系 containsKey(Object key) 查看是否包含指定key的映射关系,返回true containsValue(Object value) 此映射将一个或多个key映射到指定的value值,返回true get( Object key) 返回指定key的value值,否则返回null keySet()

ecnu18级程设实训第一次机考简易解题报告

愉快(并不)地考完了,看到LDY大佬的题解,决定学习一个,也来写一份解题报告.当然,这会是一个比较简易的版本,可能有所缺漏,敬请谅解. 此处是LDY大佬题解的传送门: https://zhuanlan.zhihu.com/p/60305621 走过路过给个赞~ A. 恢复单词 单点时限: 2.0 sec 内存限制: 512 MB 学霸在背单词的时候发现单词的大小写混乱,而且可能参杂了0-9的数字和 %,+,&,#这四种特殊符号.请编写程序让单词恢复正常.要求处理后单词的首字母大写,且其余字母均为

【未完成0.0】Noip2012提高组day2 解题报告

第一次写一套题的解题报告,感觉会比较长.(更新中Loading....):) 题目: 第一题:同余方程 描述 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. 格式 输入格式 输入只有一行,包含两个正整数a, b,用一个空格隔开. 输出格式 输出只有一行,包含一个正整数x0,即最小正整数解.输入数据保证一定有解. 样例1 样例输入1 3 10 样例输出1 7 限制 每个测试点1s 提示 对于40%的数据,2 ≤b≤ 1,000: 对于60%的数据,2 ≤b≤ 50,000,000: