在字符串 s 中找出第一個只出現一次的字符。若是沒有,返回一個單空格。java
示例:
``
s = "abaccdeff"
返回 "b"git
s = ""
返回 " "
``github
限制:面試
來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。算法
算法複雜度:數組
算法複雜度:網絡
使用256長度的數組,由於不知道題中字符範圍,實際範圍可能須要更大點,可是思路不變;ui
算法複雜度:code
package leetcode; import java.util.Iterator; import java.util.LinkedHashMap; /** * @author ZhouJie * @date 2020年5月8日 下午7:54:53 * @Description: 面試題50. 第一個只出現一次的字符 * */ public class LeetCode_Offer_50 { } class Solution_Offer_50 { /** * @author: ZhouJie * @date: 2020年5月8日 下午7:55:24 * @param: @param s * @param: @return * @return: char * @Description: 1-直接用indexOf和lastIndexOf方法; * */ public char firstUniqChar_1(String s) { for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (s.indexOf(c) == s.lastIndexOf(c)) { return c; } } return ' '; } /** * @author: ZhouJie * @date: 2020年5月8日 下午8:02:06 * @param: @param s * @param: @return * @return: char * @Description: 2-用LinkedHashMap統計; * */ public char firstUniqChar_2(String s) { LinkedHashMap<Character, Integer> map = new LinkedHashMap<Character, Integer>(); for (char c : s.toCharArray()) { map.put(c, map.getOrDefault(c, 0) + 1); } Iterator<Character> iterator = map.keySet().iterator(); while (iterator.hasNext()) { Character c = iterator.next(); if (map.get(c) == 1) { return c; } } return ' '; } /** * @author: ZhouJie * @date: 2020年5月8日 下午8:14:41 * @param: @param s * @param: @return * @return: char * @Description: 3-統計字符出現次數; * */ public char firstUniqChar_3(String s) { int[] all = new int[256]; char[] cs = s.toCharArray(); for (char c : cs) { all[c]++; } for (char c : cs) { if (all[c] == 1) { return c; } } return ' '; } }