题解 | #找出字符串中第一个只出现一次的字符#

找出字符串中第一个只出现一次的字符

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);
        }
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务