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

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

https://www.nowcoder.com/practice/e896d0f82f1246a3aa7b232ce38029d4

题解:这道题我只想到了两种解决方式,一种是利用LinkedHashMap,采取时间换空间的方法,同时也保证可以顺序遍历;一种是利用位图,用空间来换时间。参考别人的解决方式时,发现String的replaceAll() 方法有些刁钻,感觉也挺不错的。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Scanner scanner = new Scanner(br);
        String str = scanner.nextLine();
        Object result = getFirstCharacterAppearsOnlyOnce3(str);
        System.out.println(result);
    }
    // 使用String的replaceAll方法解决
    private static Object getFirstCharacterAppearsOnlyOnce3(String str) {
        if (str == null || str.length() == 0) return -1;
        for (int i = 0; i < str.length(); i++) {
            String s = str.replaceAll(str.substring(i, i + 1), "");
            if (str.length() - s.length() == 1){
               return str.substring(i,i+1);
            }
        }
        return -1;
    }

    // 使用位图解决
    private static Object getFirstCharacterAppearsOnlyOnce2(String str) {
        if (str == null || str.length() == 0) return -1;
        int[] chars = new int[126];
        for (int i = 0; i < str.length(); i++) {
            chars[str.charAt(i) - '0']++;
        }
        for (int i = 0; i < str.length(); i++) {
            if (chars[str.charAt(i) - '0'] == 1) {
                return str.charAt(i);
            }
        }
        return -1;
    }

    // 使用LinkedHashMap解决
    private static Object getFirstCharacterAppearsOnlyOnce1(String str) {
         if (str == null || str.length() == 0) return -1;
        LinkedHashMap<Character, Integer> hashMap = new LinkedHashMap<>();
        for (int i = 0; i < str.length(); i++) {
            Character ch = str.charAt(i);
            if (hashMap.containsKey(ch)){
                hashMap.replace(ch,hashMap.get(ch)+1);
            }else{
                hashMap.put(ch,1);
            }
        }
        Set<Character> keySet = hashMap.keySet();
        for (Character ch :
                keySet) {
            if (hashMap.get(ch) == 1)
                return ch;
        }
        return -1;
    }
}


#笔试刷题#
全部评论

相关推荐

猪扒已出闸:方向不够聚焦,看不出来是想找什么方向的工作
点赞 评论 收藏
分享
10-21 23:48
蚌埠坦克学院
csgq:可能没hc了 昨天一面完秒挂
点赞 评论 收藏
分享
评论
3
2
分享
牛客网
牛客企业服务