当前位置:网站首页>[Li Kou 387] the first unique character in the string

[Li Kou 387] the first unique character in the string

2022-07-06 10:37:00 Spring breeze ~ eleven years

Title Description : Given a string s , find Its first non repeating character , And return its index . If it doesn't exist , Then return to -1 .

Example 1:

Input : s = “leetcode”
Output : 0

Example 2:

Input : s = “loveleetcode”
Output : 2

Example 3:

Input : s = “aabb”
Output : -1

Tips :

  1. 1 <= s.length <= 105
  2. s Contains only lowercase letters

Solution 1 :
We can define one map aggregate ,key Character ,value Is the number of occurrences , Traversal string , Put each character in turn , First count the number of times each character appears , Then traverse the original string to find the first character that appears once , Just return the subscript .

class Solution {
    
    public int firstUniqChar(String s) {
    
        if(s == null) return -1;
        HashMap<Character,Integer> map = new HashMap<>();
        for(char ch : s.toCharArray()) {
    
            if(map.get(ch) == null) {
    
                map.put(ch,1);
            }else{
    
                int count = map.get(ch);
                map.put(ch,count+1);
            }
        }
        for(int i = 0;i < s.length();i++) {
    
            if(map.get(s.charAt(i)) == 1) {
    
                return i;
            }
        }
        return -1;
    }
}

 Insert picture description here
Solution 2 :
The second time we traverse the above method is the string , We can also traverse the hash map the second time , You only need to traverse all the values in the hash map once , Find out which is not -1 The minimum value of , That is, the index of the first non repeating character . If all values in the hash map are -1, We'll go back to -1, That is, there is no unique character

class Solution {
    
    public int firstUniqChar(String s) {
    
        Map<Character, Integer> position = new HashMap<Character, Integer>();
        int n = s.length();
        for (int i = 0; i < n; ++i) {
    // First traversal string 
            char ch = s.charAt(i);
            if (position.containsKey(ch)) {
    
                position.put(ch, -1);
            } else {
    // When the string first appears 
                position.put(ch, i);
            }
        }
        int m = n;
        for (Map.Entry<Character, Integer> entry : position.entrySet()) {
    // Traverse the hash map for the second time 
            int pos = entry.getValue();
            if (pos != -1 && pos < m) {
    
                m = pos;
            }
        }
        if (m == n) {
    // There is no unique character 
            m = -1;
        }
        return m;
    }
}

 Insert picture description here

原网站

版权声明
本文为[Spring breeze ~ eleven years]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202131708140239.html