剑指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,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置

代码

class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        int tms[256];
        // firstly, it‘s wrong without this sentence
        memset(tms, 0, sizeof(tms));

        for (int i=0; i<str.size(); ++i) {
            int tmp = int(str[i]);
            tms[tmp] = tms[tmp]+ 1;
        }
        for (int i=0; i<str.size(); ++i) {
            int tmp = int(str[i]);
            if (tms[tmp] == 1) return i;
        }
        return -1;
    }
};

原文地址:https://www.cnblogs.com/charlesblc/p/8445323.html

时间: 2024-10-11 06:12:47

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

剑指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 ********************************

剑指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; els

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

第一个只出现一次的字符位置 题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.位置索引从0开始 思路 每个字符都做对比的时间复杂度为O(n2),所以我们创建一个哈希表来存储每个字符对应的出现次数,扫描一次存储次数,扫描第二次找出第一个只出现一次的字符,时间复杂度O(n) 牺牲空间换取时间,哈希表查找的时间为O(1) 注意:最后没有符合这样条件的字符的情况 代码 public class Solution { publ

剑指 offer 第一题: 二维数组中的查找

打算写 图解剑指 offer 66 题 的系列文章,不知道大家有没有兴趣 ?? 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目分析 图 1 如果没有头绪的话,很显然使用 暴力解法 是完全可以解决该问题的. 即遍历二维数组中的每一个元素,时间复杂度:O(n^2). 其实到这里我们就可以发现,使用这种暴力解法并没有充分利用题目给出的信息.这

31.第一个只出现一次的字符位置

第一个只出现一次的字符位置 参与人数:2802时间限制:1秒空间限制:32768K 本题知识点: 字符串 算法知识视频讲解 题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.位置索引从0开始 虽说C++的string类用起来超爽,但是和平时的使用习惯不同,我更喜欢原滋原味的C风格字符.这道题我写了两个版本,一个是C++风格的string,另一个是C风格字符串. 注意,C风格字符串中判断是否到达字符串末尾的两种方法:

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

问题描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.位置索引从0开始. 示例: 输入:sabcdsdf 输出:1 算法描述 定义一个52个元素的整型数组aCount,初始化为0,每个字母(大小写)依次对应一个,记录字母出现的次数: 定义一个52个元素的整型数组aPos,初始化为-1,每个字母(大小写)对应一个,记录字母第一次出现的位置: 每次遍历一个到字母,aCount数组里对应字母加1,判断目前aCount数组里该字

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

[ 声明:版权所有,转载请标明出处,请勿用于商业用途.  联系信箱:[email protected]] 题目链接:http://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出