算法基础-数组中只出现一次的数字
题目详情
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例 1:
输入:s = “abaccdeff”
输出:‘b’
示例 2:
输入:s = “”
输出:’ ’
题目分解/做题思路
1、要找到数组中只出现一次的数字,可以使用map来存储Key和次数
2、使用LinkedHashMap来存储,LinkedHashMap可以保留原始的输入顺序,hashMap无法保留顺序
LinkedHashMap
LinkedHashMap 是 Java 中的一个集合类,它是基于哈希表实现的,并且维护了元素的插入顺序。它扩展了 HashMap 类,因此拥有与 HashMap 相似的功能,但额外地保留了元素插入的顺序,使得在遍历时能够按照插入顺序访问元素。
主要特点:
-
保持插入顺序:
LinkedHashMap 在内部使用链表来维护元素的插入顺序。这意味着当你迭代 LinkedHashMap 的条目时,它们会按照元素最初插入的顺序进行访问,从而保持了插入顺序。 -
基于哈希表:
LinkedHashMap 是基于哈希表的数据结构,这使得它在查找、插入和删除元素方面具有很高的效率。 -
允许空键和空值:
与 HashMap 一样,LinkedHashMap 也允许键和值为 null。 -
性能与空间开销:
由于维护插入顺序需要额外的链表结构,相比于普通的 HashMap,LinkedHashMap 在一些特定操作上可能稍微有些性能和内存开销。
解题步骤
class Solution {
public char firstUniqChar(String s) {
//使用LinkedHashMap可以保留插入顺序,HashMap是无序的
Map<Character,Integer> map = new LinkedHashMap<>();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
map.put(ch,map.getOrDefault(ch,0)+1);
}
List<Map.Entry> entries = new ArrayList<>(map.entrySet());
System.out.println(entries);
char result = (char)entries.get(0).getKey();
for (int i = 0; i < entries.size(); i++) {
if((int)entries.get(i).getValue() == 1){
result =(char) entries.get(i).getKey();
break;
}else {//数组中没有只出现一次的直接输出' ';
result = ' ';
}
}
return result;
}
}
相关标签:哈希表字符串计数