题目链接

https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?tpId=13&tqId=11187&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题意

在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).

解题思路

可以用stl Map 也可以自己用数组实现简单的hashMap。key为字符唯一对应的一个idx,value为字符第一次出现的位置。初始化为-1,若第二次出现则标记为-2。

最终遍历hashMap找到最小的>0的value即可。

查询效率为O(1),遍历为O(n),总时间复杂度O(n).

代码

class Solution {
public:
int FirstNotRepeatingChar(string str) {
if(!str.size()){
return -1;
} //0 to 25 'a' to 'z',26 to 51 'A' to 'Z'
int occurPos[52];
memset(occurPos,-1,sizeof(occurPos)); for(int i=0;i<str.size();++i){
int idx;
if(str[i]>='a'&&str[i]<='z'){
idx=str[i]-'a';
}
else{
idx=str[i]-'A'+26;
} if(occurPos[idx]==-1){
occurPos[idx]=i;
}
else if(occurPos[idx]>=0){
occurPos[idx]=-2;
}
} int firstPos=53;
for(int i=0;i<52;++i){
if(occurPos[i]>=0&&occurPos[i]<firstPos){
firstPos=occurPos[i];
}
}
if(firstPos==53){
return -1;
}
else{
return firstPos;
}
}
};

[剑指Offer]50-第一个只出现一次的字符的更多相关文章

  1. 剑指 Offer 50. 第一个只出现一次的字符 + 哈希表 + 有序哈希表

    剑指 Offer 50. 第一个只出现一次的字符 Offer_50 题目详情 方法一:使用无序哈希表 package com.walegarrett.offer; /** * @Author Wale ...

  2. 每日一题 - 剑指 Offer 50. 第一个只出现一次的字符

    题目信息 时间: 2019-07-03 题目链接:Leetcode tag:哈希表 难易程度:简单 题目描述: 在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. s 只包含小写字 ...

  3. 【力扣】剑指 Offer 50. 第一个只出现一次的字符

    在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. s 只包含小写字母. 示例: s = "abaccdeff"返回 "b" s = &qu ...

  4. [剑指offer] 50. 第一个只出现一次的字符 + map,hashmap 及其区别

    class Solution { public: int FirstNotRepeatingChar(string str) { map<char,int>mp; ;i<str.si ...

  5. 剑指 Offer 50. 第一个只出现一次的字符

    本题 题目链接 题目描述 我的题解 (方法三应用更广泛:方法一虽有限制,但很好用,此题中该方法效率也最高) 方法一:(适用于范围确定的) 思路分析 该字符串只包含小写字母,即字符种类最多26个 开一个 ...

  6. 【剑指Offer】第一个只出现一次的字符 解题报告(Python)

    [剑指Offer]第一个只出现一次的字符 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  7. Go语言实现:【剑指offer】第一个只出现一次的字符位置

    该题目来源于牛客网<剑指offer>专题. 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1( ...

  8. 《剑指offer》第一个只出现一次的字符

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:

  9. 剑指Offer:第一个只出现一次的字符

    题目:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",这输出'b' // 第一个只出现一次的字符 #include <stdio.h> char f ...

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

    题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字 ...

随机推荐

  1. Masonry 动画

    比如想做一个最简单的位移动画: 关键点在,改完约束后,调用下面这段代码,父view调用 layoutIfNeeded [UIView animateWithDuration:0.5 animation ...

  2. P12, cer, provisioning profile

    p12,本地私钥(实际上证书和私钥可以一起导出成p12,这里我们仅指私钥) cer,证书,即苹果签名后的公钥 provisioning profile描述文件 一个证书对应一个私钥,也就是本地的p12 ...

  3. BlockingQueue之DelayQueue的学习使用

    DelayQueue 是一中阻塞队列,需要实现接口Delayed定义的方法.做下使用记录和心得吧, @Datapublic class DelayQueueExample implements Del ...

  4. python multithread task_done

    queue.task_done()用在queue消费者中,在queue.get()调用之后调用queue.task_done()用于通知队列已经完成了工作,使queue.join()知道任务已经完成. ...

  5. How to Pronounce Numbers 11 – 19

    How to Pronounce Numbers 11 – 19 Share Tweet Share Tagged With: Numbers Numbers are something you’ll ...

  6. Haskell语言学习笔记(77)Data.HashSet

    安装 unordered-containers $ cabal install unordered-containers Installed unordered-containers-0.2.9.0 ...

  7. [ SHELL编程 ] echo和printf使用实例

    本文主要描述Linux系统中echo和printf命令的使用方法,包括命令参数的含义.使用技巧. 1.echo    了解一个命令我们首先要知道它能做什么,它有哪些参数,参数的含义,可以实现我们哪方面 ...

  8. 遍历DOM树,获取子节点

    获取子节点的方法有:  方法  说明  children()  选取子节点,可以带过滤参数.但只能选择子节点,不能选择孙子节点.  find()  选取子节点,可以带过滤参数.可以选择子节点及孙子节点 ...

  9. Structs复习 Result第一部分

    Jar包 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=&q ...

  10. oracle 连接池参数

    后来排查出数据库监听异常,发现是ORA-12519拒绝错误.后来发现是数据的连接池达到的极致. 具体解决方案如下: --首先检查process和session的使用情况,在sqlplus里面查看. S ...