剑指offer系列——34.第一个只出现一次的字符

摘要:
Q: 查找字符串中只出现一次的第一个字符,并返回其位置。如果没有,返回-1。T: 1。第一个响应必须是map。请注意,插入地图后,它将不会按照插入顺序排列,而是在内部排序。

Q:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
T:
1.第一反应肯定是map。注意,map插入后不会按照插入顺序排放,是会内置排序的。

    int FirstNotRepeatingChar(string str) {
        if (str.empty())
            return -1;
        map<char, int> mp;
        for (int i = 0; i < str.size(); i++) {
            if (mp.find(str[i]) == mp.end())
                mp.insert(make_pair(str[i], 1));
            else
                mp[str[i]]++;
        }
        for (int i = 0; i < str.size(); i++) {
            if (mp[str[i]] == 1)
                return i;
        }
        return -1;
    }

2.类似创建一个hash数组

    int FirstNotRepeatingChar(string str) {
        int hash[256]={0};
        for(int i=0;i<str.size();i++)
            hash[str[i]]++;
        
        for(int i=0;i<str.size();i++)
        {
            if(hash[str[i]]==1)
                return i;
        }
        return -1;
    }

3.python的内置count函数

def FirstNotRepeatingChar(self, s):
        return s.index(list(filter(lambda c:s.count(c)==1,s))[0]) if s else -1

免责声明:文章转载自《剑指offer系列——34.第一个只出现一次的字符》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vps建站教程 CentOS6如何安装配置FTP服务器MAC终端命令行下用sublime、vscode、atom打开文件或目录下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python3之字符串(str)

1 命名 str='value' str="value" 2 原始字符串 str=r'value' value按照字面的意思使用,没有转义特殊或不能打印的字符 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法 3 转义字符 (在行尾时) 续行符 \...

01--Java开发中文乱码问题分析

一、常见的编码格式 1. ASCII码 总共128个字符,用1个字节的低7位表示,0~31是控制字符,32~126是打印字符。 2.  ISO-8859-1 ISO组织在ASCII基础上进行扩展,仍是单字节编码,支持256个字符,支持大部分西欧字符。 3. GB2312 GBK GB18030 GB2312可用GBK方式解码,不会有问题。GB18030使用不...

Access数据库 字段值 字符替换

两种方法: (一)Access数据库内部使用方法 Update 表 SET 字段=replace(字段,"原字符","替换字符") 示例: 假设表为biao、字段为content、原字符为xiazai.jb51.net、替换字符为down1.jb51.net, 那么相应的SQL语句如下:Update biao SET content=replace(co...

SqlServer获取字符串中数字,中文及字符部分数据

--获取英文字符数据 Create function [dbo].[Fun_GetChar] ( @No varchar(100) ) RETURNS varchar(100) AS BEGIN WHILE PATINDEX('%[^A-Za-z]%',@No)>0 BEGIN SET @No=STUFF(@No,PATINDEX(...

带中文的字符串截取

最近在页面展示的时候遇到这样的场景,文字有可能超长,却又不允许换行。 当然,可以用高超的css来搞定。但如果你想要让多余的文字用“...”来代替,并且要兼容很多浏览器,这种时候用css也会很头疼吧。 1.C#对中文字符串的截取 与英文字符相比,我们把中文字符按两个占位来计算,对于带中文的字符串截取,要面临两个问题: 1.无法截取半个中文字符; 2.对于除...

JS编码方式

1. escape(): 采用unicode字符集对指定的字符串除0-255以外进行编码。所有的空格符、标点符号、特殊字符以及更多有联系非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z。 2...