# Question

Formatted question description: https://leetcode.ca/all/387.html

 387	First Unique Character in a String

Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.

Examples:

s = "leetcode"
return 0.

s = "loveleetcode",
return 2.

Note: You may assume the string contain only lowercase letters.



# Algorithm

The hash table builds a mapping between each character and its number of occurrences, and then traverses the string in order, finds the first character with a number of occurrences of 1, and returns its position.

# Code

• 
public class First_Unique_Character_in_a_String {

public static void main (String[] args) {
First_Unique_Character_in_a_String out = new First_Unique_Character_in_a_String();
Solution s = out.new Solution();

System.out.println(s.firstUniqChar("loveleetcode"));
}

class Solution {
public int firstUniqChar(String s) {

if (s == null || s.length() == 0) {
return -1;
}

// unique[i] meaning index i has no duplicate
int[] count = new int;

for (char each: s.toCharArray()) {
count[each] += 1;
}

for (int i = 0; i < s.length(); i++) {
if (count[s.charAt(i)] == 1) {
return i;
}
}

return -1;
}
}
}

• // OJ: https://leetcode.com/problems/first-unique-character-in-a-string/
// Time: O(S)
// Space: O(1)
class Solution {
public:
int firstUniqChar(string s) {
int cnt = {0};
for (char c : s) cnt[c - 'a']++;
for (int i = 0; i < s.size(); ++i) {
if (cnt[s[i] - 'a'] == 1) return i;
}
return -1;
}
};

• class Solution:
def firstUniqChar(self, s: str) -> int:
counter = Counter(s)
for i, c in enumerate(s):
if counter[c] == 1:
return i
return -1

############

class Solution(object):
def firstUniqChar(self, s):
"""
:type s: str
:rtype: int
"""
letters =  * 26
for c in s:
ci = ord(c) - ord('a')
letters[ci] += 1
for i in range(0, len(s)):
ci = ord(s[i]) - ord('a')
if letters[ci] == 1:
return i
return -1