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.

Ideas:

1. {}
2. Map()
3. indexOf(char, fromIndex) // fastest

My solution

fastest, no space

/**
 * @param {string} s
 * @return {number}
 */
var firstUniqChar = function(s) {
  for (var i=0; i<s.length; i++) {
    var c = s[i];
    if (s.indexOf(c)===i && s.indexOf(c, i+1)===-1) return i
  }
  return -1;
};

map, space O(n)

var firstUniqChar = function(s) {
  var m = new Map()
  for(let i=0;i<s.length;i++) {
    const k = s[i]
    if (m.has(k)) {
      if (m.get(k) !== -1) m.set(k, -1)
    } else m.set(k, i)
  }
  for (v of m) {
    if (v[1]!==-1) return v[1]
  }
  // // iteratee values
  // const iter = m.values()
  // let itee = iter.next()
  // while (!itee.done) {
  //   if (itee.value!==-1) return itee.value
  //   itee = iter.next()
  // }
  return -1
}

Object {}

var firstUniqChar = function(s) {
  var used = {}
  for(let i=0;i<s.length;i++) {
    const k = s[i]
    if (typeof used[k] === 'undefined') used[k] = 1
    else used[k]++
  }
  var arr = Object.keys(used)
  for (let i=0; i<arr.length; i++) {
    if (used[arr[i]]===1) return s.indexOf(arr[i])
  }
  return -1
};

results matching ""

    No results matching ""