题解 | #找出字符串中第一个只出现一次的字符#
找出字符串中第一个只出现一次的字符
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); } } }