gpt4 book ai didi

java - 是否可以在同一个循环中从 Hashmap 中找到值的第一个实例?

转载 作者:行者123 更新时间:2023-12-01 06:49:12 25 4
gpt4 key购买 nike

好的,我有一个面试编码问题,该问题指出在一个循环中我必须找到非重复字符的第一个实例。例如,如果字符串是“abcab”,它将返回 c,因为 a 和 b 重复。

我有以下代码,它会迭代整个字符串,并将出现的字符数输入到 HashMap 中,并且它可以工作。

private static  boolean findFirstCharacter(String s) {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();

for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(!map.containsKey(c)){
map.put(c,1);

}else{
int value = map.get(c);
value++;
map.put(c,value);


}



}


}

现在显然我可以再次迭代并找到键值为 1 的第一个实例,但它必须是一个循环。鉴于我所拥有的,是否有办法做到这一点,或者我是否错误地处理了这个问题?

最佳答案

这是在单个循环中执行此操作的一种方法。

该方法可以处理来自补充平面的 Unicode 字符,并且已被修改为返回第一个非重复字符,而不是 boolean

注意:代码需要 Java 8+。

private static String findFirstCharacter(String s) {
Set<Integer> singles = new LinkedHashSet<>(), duplicates = new HashSet<>();
s.codePoints().forEach(ch -> {
if (! duplicates.contains(ch) && ! singles.add(ch)) {
singles.remove(ch);
duplicates.add(ch);
}
});
return (singles.isEmpty() ? null : new String(new int[] { singles.iterator().next() }, 0, 1));
}

测试

System.out.println(findFirstCharacter("abcab"));
System.out.println(findFirstCharacter("abcbca"));
System.out.println(findFirstCharacter("😀😈😍😀😈"));

输出

c
null
😍

关于java - 是否可以在同一个循环中从 Hashmap 中找到值的第一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51267328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com