字符串中的第一个唯一字符
- 一、题目
- 1.题目描述
- 2.原题链接
- 二、解题报告
- 1.思路分析
- 2.代码详解
一、题目 1.题目描述
2.原题链接字符串中的第一个唯一字符
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。示例 1:
输入: s = “leetcode” 输出: 0
示例 2:输入: s = “loveleetcode” 输出: 2
示例 3:输入: s = “aabb” 输出: -1
提示:
1 <= s.length <= 105 s 只包含小写字母
二、解题报告 1.思路分析提示:题目链接放这里
2.代码详解思路:hash
对字符串进行两次遍历。
在第一次遍历时,我们使用哈希映射统计出字符串中每个字符出现的次数。在第二次遍历时,我们只要遍历到了一个只出现一次的字符,那么就返回它的索引,否则在遍历结束后返回−1。
//暴力查找
class Solution {
public:
int firstUniqChar(string s) {
int j;
for(int i=0;i
for(j=0;j
if(i==j)continue;
if(s[i]==s[j])break;
}
if(j>=s.size())return i;
}
return -1;
}
};
执行结果: 通过 显示详情 添加备注
执行用时: 64 ms , 在所有 C++ 提交中击败了
7.99% 的用户 内存消耗:
10.3 MB , 在所有 C++ 提交中击败了
88.50% 的用户 通过测试用例: 105 / 105
//哈希法
class Solution {
public:
int firstUniqChar(string s) {
int hash[255]={0};
for(int i=0;i
执行结果:通过 显示详情 添加备注
执行用时: 12 ms , 在所有 C++ 提交中击败了
98.08% 的用户 内存消耗:
10.3 MB , 在所有 C++ 提交中击败了
87.93% 的用户 通过测试用例: 105 / 105
//双向查找
class Solution {
public:
int firstUniqChar(string s) {
for(int i=0;i
int a=s.find(s[i]);
int b=s.rfind(s[i]);
if(a==b)return i;
}
return -1;
};
};
执行结果: 通过 显示详情 添加备注
执行用时: 24 ms , 在所有 C++ 提交中击败了
71.34% 的用户 内存消耗:
10.4 MB , 在所有 C++ 提交中击败了
75.39% 的用户 通过测试用例: 105 / 105



