一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情。
leetcode刷题387字符串中的第一个唯一字符
前文
本文为leetcode字符串处理类型题目,主要考察对于字符串中重复内容的查找。题目序号为387,题目链接为https://leetcode-cn.com/problems/first-unique-character-in-a-string/。
题目信息
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
示例 1:
输入: s = "leetcode" 输出: 0 示例 2:
输入: s = "loveleetcode" 输出: 2 示例 3:
输入: s = "aabb" 输出: -1
解题思路
根据题目信息,首先我们有一个字符串,需要从中找出第一个不重复的字符。很明显,首先我们一定需要对于字符串做一次遍历,并记录每一个字符串出现的次数。而本解法主要采取的思路则是引入map的数据结构进行字符串中每个字符的出现次数。通过一轮遍历后,将所有的字符串都存入到哈希结构之中。而此时再次对于字符串进行遍历,对于每一个出现的字符,都到哈希表中查找字符串中存在的总次数。当找到第一个次数为1时,则直接返回该位置,就是第一个唯一字符所在的位置。如果遍历结束都没找到值为1的字符,则返回-1,认为不存在唯一字符。而哈希的键则采用char转换为字符串类型来操作。以上即为本题目的解法。另外还可以采用队列进行操作。利用队列与哈希的配合,在遍历中直接将出现次数及元素在队列中存储。利用队列先进先出的原则,也可以完成此题目的解答。
解题代码
public int firstUniqChar(String s) {
Map<String,Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
String item = String.valueOf(s.charAt(i));
int cnt = map.getOrDefault(item,0);
map.put(item,cnt + 1);
}
for (int i = 0; i < s.length(); i++) {
String item = String.valueOf(s.charAt(i));
if(map.get(item) == 1){
return i;
}
}
return -1;
}
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。