【追求进步】第一个只出现一次的字符位置

这个题目普遍的想法即就是for循环然后比较,复杂度是o(n)

题目描述

在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置。若为空串,返回-1。位置索引从0开始.
在线代码:
 import java.util.HashMap;
 public class Solution {
  
    public int FirstNotRepeatingChar(String str) {
        //第一种方法是初始a到z的一个数组,数组的下标是字符a到z的ascii的编码即就是65到91
        //复杂度也是遍历两次for,也就是o(2n)
        /*char[] c=str.toCharArray();
        int [] a=new int['z'];
        for(char b:c){
            a[(int)b]++;
        }
        for(int i=0;i<c.length;i++){
            if(a[(int)c[i]]==1){
                return i;
            }
        }
        return -1;*/  
        //接着面试官要求时间复杂度O(n)用哈希表解决的办法
        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);
            }else{
                map.put(str.charAt(i),1);
            }
        }
        for(int i=0;i<str.length();i++){
            char b=str.charAt(i);
            if(map.get(b)==1){
                return i;
            }
        }
        return -1;
    }
}


你可能感兴趣的:(【追求进步】第一个只出现一次的字符位置)