[LeetCode]387. First Unique Character in a String(在字符串中找不重复字符)

387. First Unique Character in a String

Given a string, find the first non-repeating character in it and return it’s index. If it doesn’t exist, return -1.
给定一个字符串,找到第一个不重复的字符并返回它的索引。 如果不存在,返回-1。
Examples:

s = "leetcode"
return 0.

s = "loveleetcode",
return 2.

Note:
You may assume the string contain only lowercase letters
(假定只有小写字母).

思路:

  • 定义一个数组,存储字符串各个字母的数量,初始化为0
  • 遍历字符串的各个字符,字符的数量依次增加
  • 遍历字符串,查看该字符数量,若为1,返回下标,若均大于1,返回-1

    代码如下:

#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
    int firstUniqChar(string s) {
        //A~Z 65~90  a~z 97~122
        vector<int> res(26, 0);//用res存储各个字符的数量,默认为0
        for(int i=0; i<s.length(); i++)
            res[s[i]-97]++;//将各个字符的数量+1
        for(int i=0; i<s.length(); i++)
            if(res[s[i]-97] == 1)//若字符只有一个,不重复,返回该字符位置
                return i;
        return -1;
    }
};
int main()
{
    Solution a;
    cout << "请输入一个只含小写字母的字符串: ";
    string s;
    cin >> s;
    cout << "第一个不重复字符的索引是: " << a.firstUniqChar(s)<< endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值