求僅出現一次的最先字符

題目函數

請實現一個函數用來找出字符流中第一個只出現一次的字符。google

例如輸入google,輸出lspa

代碼code

 1     private static Set<Character> filter = new HashSet<>();
 2     private static LinkedList<Character> result = new LinkedList<>();
 3 
 4     private static void getFirstChar(String string) {
 5         char[] chars = string.toCharArray();
 6         for (Character ch : chars) {
 7             if (!filter.contains(ch)) {
 8                 int cIndex = result.indexOf(ch);//避免使用contains底層遍歷屢次
 9                 if (cIndex == -1) {
10                     result.add(ch);
11                 } else {
12                     result.remove(cIndex);//複用
13                     filter.add(ch);
14                 }
15             }
16         }
17         System.out.println(result.size() == 0 ? "#" : result.getFirst());
18     }

 

上述是我寫的代碼,後來發現一個學弟寫的更好,來貼一下,你們圍觀~~blog

 1     public static void findChar(String string) {
 2         char[] chars = new char[256];//全部字符--256,同時此處用char不用Int是爲了減小空間
 3         for (int i = 0; i < string.length(); i++) {
 4             chars[string.charAt(i)]++;
 5         }
 6         for (int i = 0; i < string.length(); i++) {
 7             if (chars[string.charAt(i)] == 1) {
 8                 System.out.println(string.charAt(i));
 9                 break;
10             }
11             if (chars[string.charAt(i)] != 1 && i == string.length() - 1) {
12                 System.out.println("#");
13             }
14         }
15     }
相關文章
相關標籤/搜索