firstUniqChar-字符串中的第一个唯一字符(java)
作者:互联网
问题提出
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例:
s = “leetcode”
返回 0
s = “loveleetcode”
返回 2
提示:你可以假定该字符串只包含小写字母。
Related Topics 哈希表 字符串
解体思路
根据题目提示的hash表,很容易想到以下的解题思路
1.创建一个LinkedHashMap,不是HashMap。因为LinkedHashMap可以保持key录入,更新时候的顺序不变。
Map<Character, List<Integer>> map=new LinkedHashMap<>();
格式挨个遍历,放入Map中。第一个参数是字符串不同元素的字符值,第二个记录位置
2.遍历map,如果map的value值,也就是list有多个就继续找,找出第一个value值只有一个的即可,找到它在s中的位置
代码演示:
class Solution {
public int firstUniqChar(String s) {
Map<Character, List<Integer>> map=new LinkedHashMap<>();
for (int i = 0; i < s.length(); i++) {
List<Integer> list;
if(map.get(s.charAt(i))==null)
list=new ArrayList<>();
else
list= map.get(s.charAt(i));
list.add(i);
map.put(s.charAt(i),list);
}
Set<Map.Entry<Character, List<Integer>>> entries = map.entrySet();
Iterator<Map.Entry<Character, List<Integer>>> iterator = entries.iterator();
while (iterator.hasNext())
{
Map.Entry<Character, List<Integer>> next = iterator.next();
if(next.getValue().size()!=1)
continue;
return s.indexOf(String.valueOf(next.getKey()));
}
return -1;
}
}
效果(不佳)
info
解答成功:
执行耗时:55 ms,击败了5.33% 的Java用户
内存消耗:40.8 MB,击败了5.04% 的Java用户
标签:map,java,iterator,Map,list,next,字符串,firstUniqChar,LinkedHashMap 来源: https://blog.csdn.net/tangshuai96/article/details/111575188