首页 > 其他分享 >剑指 Offer50. 第一次只出现一次的字符

剑指 Offer50. 第一次只出现一次的字符

时间:2023-03-05 21:56:40浏览次数:42  
标签:字符 end 第一次 dic char 键值 Offer50 哈希 find

题目描述

 

 

解法一

哈希表法

思路:首先遍历一遍s,在哈希表里统计字符数量是否大于1;再遍历一遍s,在哈希表中找到首个数量为1的字符

class Solution {
public:
    char firstUniqChar(string s) {
        unordered_map<char, bool> dic;
        for(char c : s)
            dic[c] = dic.find(c) == dic.end();
        for(char c : s)
            if(dic[c]) return c;
        return ' ';
};

注:所用到unorder_map的成员方法

<1>查找以 key 为键的键值对,如果找到,则返回一个指向该键值对的正向迭代器;反之,则返回一个指向容器中最后一个键值对之后位置的迭代器(如果 end() 方法返回的迭代器)。

dic.find(c)

<2>返回指向容器中最后一个键值对之后位置的正向迭代器。

dic.end()

 

解法二

有序哈希表

思路与法一类似,减少了第二轮遍历,提高了效率;

需要借助数组按序存储哈希表dic中的key

class Solution {
public:
    char firstUniqChar(string s) {
        vector<char> p;
        unordered_map<char, bool> dic;
        for(char c : s) {
            if(dic.find(c) == dic.end())
                p.push_back(c);
            dic[c] = dic.find(c) == dic.end();
        }
        for(char c : p) {
            if(dic[c]) return c;
        }
        return ' ';
    }
};

 

标签:字符,end,第一次,dic,char,键值,Offer50,哈希,find
From: https://www.cnblogs.com/zc-030/p/17181802.html

相关文章

  • Java小练习--统计字符串中字母和数字的个数
    题目统计字符串中字母和数字的个数完整代码packagetestimportjava.util.Scanner;publicclasscustomer1{publicstaticvoidmain(Stringargs[]){System.out.......
  • stata:删除字符串的空格
    //替换所有空格//下面语句结果为4displength(subinstr("1233","","",.))//itrim(s)将字符间多于一个空格缩减为一个空格,对首尾空格不起作用displengt......
  • NOI / 1.7编程基础之字符串 12:加密的病历单
    描述小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又......
  • 1.7编程基础之字符串
    12:加密的病历单1.描述小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得......
  • STATA:字符型 数值型变量转换
    STATA:字符型数值型变量转换//real()将字符转为数字gena6=price+real("1")//将变量a6的类型设置为int(原来浮点型)recastinta6//将变量a6的类型由int转为strtos......
  • Python 字符串详解
    Python访问字符串中的值:Python访问子字符串,可以使用方括号来截取字符串,如下实例:#!/usr/bin/python#coding:UFT-8var1='HelloWorld!'var2="PythonRunoob"print"var......
  • 字符串转换为基本数据类型
    字符串转换为基本数据类型Integer.parseInt();基本数据类型转为字符串String.valueOf(123);实例代码:Strings="1234";System.out.println(Integer.parseInt(s));//12......
  • 软件设计与体系结构第一次分享
    1.单一职责原则:就是对于类来说,一个类应该只负责一项职责,规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分,也就是说,接口的职责并不是单一的,而是包含两个职责(......
  • #yyds干货盘点 【React工作记录五】如何处理数据格式字符串让它加上标签
     前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了......
  • Python 字符串切割函数设计
    s="fs.fes..23...43....tghf"print"要切割的字符串为:",s,"\n"s=s.strip()#去掉字符串左右两边空格print"输出去掉空格的字符串:",s,"\n"#sep为切割字符串的......