题解 | #找出字符串中第一个只出现一次的字符#
找出字符串中第一个只出现一次的字符
https://www.nowcoder.com/practice/e896d0f82f1246a3aa7b232ce38029d4
如果不要第一次出现的字符,可以用hashmap很容易解决。
这样要求的话,就要求key值不能自动进行排序。
所以自定义了一个Pair对象,用List容器来承载。
重写Pair对象的equals和hashcode方法,以方便使用List容器的特性。
用时大概半个钟
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Scanner;
import java.util.stream.Collectors;
public class PrintOnlyOneApparStr {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String nextLine = scanner.nextLine();
char[] charArray = nextLine.toCharArray();
List<SelfPair<Character, Integer>> resultList = new ArrayList<>();
for (char ch : charArray) {
Character character = Character.valueOf(ch);
SelfPair<Character, Integer> pair = new SelfPair<>(character, 0);
// 有这个字符,则value加1
if (resultList.contains(pair)) {
int indexOf = resultList.indexOf(pair);
SelfPair selfPair = resultList.get(indexOf);
Integer value = (Integer) selfPair.value;
value = value + 1;
selfPair.value = value;
} else {
pair.value = 1;
resultList.add(pair);
}
}
List<SelfPair<Character, Integer>> collect = resultList.stream().filter(obj -> obj.value.intValue() == 1)
.collect(Collectors.toList());
if (collect.isEmpty()) {
System.out.println(-1);
} else {
System.out.println(collect.get(0).key);
}
}
}
private static class SelfPair<K, V> {
private K key;
private V value;
public SelfPair(K key, V value) {
this.key = key;
this.value = value;
}
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
SelfPair<?, ?> selfPair = (SelfPair<?, ?>) o;
return key.equals(selfPair.key);
}
public int hashCode() {
return Objects.hash(key);
}
}
}
