zoukankan      html  css  js  c++  java
  • leetcode解题: First Unique Character in a String (387)

    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.

    解法1:HashTable

    思路是将字符串建立hashtable,其中存的是每一个字符出现的位置,如果出现超过1次则位置设置为-1,然后遍历hashtable找出最小的非-1的即可。
    C++

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class {
    public:
    int firstUniqChar(string s) {
    unordered_map<char, int> map;
    for (int i = 0; i < s.size(); ++i) {
    if (map.find(s[i]) != map.end()) {
    map[s[i]] = -1;
    } else {
    map[s[i]] = i;
    }
    }
    int res = s.size();
    for (auto iter = map.begin(); iter != map.end(); ++iter) {
    if (iter->second !=-1) {
    res = min(res, iter->second);
    }
    }
    if (res == s.size()) return -1;
    else return res;
    }
    };

    Java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    class {
    public int firstUniqChar(String s) {
    if (s == null || s.length() == 0) {
    return -1;
    }
    Map<Character, List<Integer>> map = new HashMap<>();
    for (int i = 0; i < s.length(); i++) {
    char ch = s.charAt(i);
    if (!map.containsKey(ch)) {
    map.put(ch, new ArrayList<Integer>());
    }
    map.get(ch).add(i);
    }
    大专栏  leetcode解题: First Unique Character in a String (387)ne"> int res = Integer.MAX_VALUE;
    for (char key : map.keySet()) {
    if (map.get(key).size() == 1) {
    res = Math.min(res, map.get(key).get(0));
    }
    }
    return res == Integer.MAX_VALUE ? -1 : res;
    }
    }

    解法2:HashTable

    上面的思路有点繁复,如果hashtable中存入每一个字符出现的次数,那么只需要重新扫描一遍字符串,找到第一个次数为1的就是所求的答案。
    C++

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class {
    public:
    int firstUniqChar(string s) {
    unordered_map<char, int> map;
    for (char c : s) {
    ++map[c];
    }
    for (int i = 0; i < s.size(); i++) {
    if (map[s[i]] == 1) {
    return i;
    }
    }
    return -1;
    }
    };

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class {
    public int firstUniqChar(String s) {
    if (s == null || s.length() == 0) {
    return -1;
    }
    Map<Character, Integer> map = new HashMap<>();
    for (int i = 0; i < s.length(); i++) {
    char ch = s.charAt(i);
    map.put(ch, map.getOrDefault(ch, 0) + 1);
    }
    for (int i = 0; i < s.length(); i++) {
    char ch = s.charAt(i);
    if (map.get(ch) == 1) {
    return i;
    }
    }
    return -1;
    }
    }
  • 相关阅读:
    收藏:详解交换机基础知识
    Linux Used内存到底哪里去了?
    TCP三次握手和四次挥手以及11种状态
    操作系统深度研究(75页PPT)
    命令行版的斗地主你玩过没?
    10大黑客专用的 Linux 操作系统
    (四)Linux命令大全:帮助命令
    (三)Linux命令大全:文件搜索命令
    (二)Linux命令大全:权限管理命令
    (一)Linux命令大全:文件处理命令
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12401730.html
Copyright © 2011-2022 走看看