剑指 Offer 50. 第一个只出现一次的字符

解法
 直观解法是遍历每个字符,将当前字符和其余字符比较判断有无重复。
 这种解法时间复杂度为
    
     
      
       
        O
       
       
        (
       
       
        
         n
        
        
         2
        
       
       
        )
       
      
      
       O(n^2)
      
     
    O(n2)。
  为了更快的解决问题可以使用哈希表,键为字符,值为对应的次数。char为8位所以有256种可能,可以定义一个数组下标为字符对应的ASCII码,元素为出现的次数。遍历两次字符串,第一次遍历记录次数,第二次遍历找到第一次出现次数为1的字符返回。
class Solution {
    public char firstUniqChar(String s) {
        if(s == null || s.length() == 0)
            return ' ';
        int[] myHash = new int[256];
        for(int i = 0; i < s.length(); i++) {
            myHash[s.charAt(i)]++;
        }
        for(int i = 0; i < s.length(); i++) {
            if(myHash[s.charAt(i)] == 1)
                return s.charAt(i);
        }
        return ' ';
    }
}

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号