第34题——第一个只出现一次的字符

166 阅读1分钟

题目:

在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).

思路

创建一个HashMap,遍历整个字符串,并记录它出现的次数。再for循环遍历一遍hashmap,第一个其键值对中的值为一的就是所要求的。

Java

package nowcoder;

import java.util.HashMap;

public class S34_FirstNotRepeatingChar {
    public int firstNotRepeatingChar(String str){
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();
        for (int i=0;i<str.length();i++){
            if (map.containsKey(str.charAt(i))){
                int count = map.get(str.charAt(i));
                map.put(str.charAt(i), count+1);
            }
            else map.put(str.charAt(i), 1);
        }
        for (int i=0;i<str.length();i++){
            if (map.get(str.charAt(i)) == 1)
                return i;
        }
        return -1;
    }
    public static void main(String[] args){
        S34_FirstNotRepeatingChar s34 = new S34_FirstNotRepeatingChar();
        String str = "skdlfjksljflbjalkfhisahdfjlak";
        System.out.println(s34.firstNotRepeatingChar(str));
    }
}

Python

class FirstNotRepeatingChar:
    def firstNotRepeatingChar(self, str):
        dict = {}
        for i in str:
            if i not in dict:
                dict[i] = 1
            else: dict[i] += 1
        for key in dict:
            if dict[key] == 1:
                return str.index(key)
        return -1

if __name__ == '__main__':
    test = FirstNotRepeatingChar()
    str = "google"
    print(test.firstNotRepeatingChar(str))