美文网首页
50.第一个只出现一次的字符(简单)

50.第一个只出现一次的字符(简单)

作者: 今天柚稚了么 | 来源:发表于2020-02-21 14:23 被阅读0次

考点:本题考查时间空间效率的平衡

题目描述

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

思路一:

从头开始扫描这个字符串中的每个字符,进行比较,时间复杂度为O(n^2)

思路二:

建立一个哈希表,键值Key是字符,值Value是字符出现的次数。从头开始扫描字符串两次,第一次扫描,统计每个字符的出现次数;第二次扫描,从哈希表中得到该字符,如果该字符出现的次数为1,则返回这个字符的位置,时间复杂度为O(n)

import java.util.HashMap; 
public class Solution {
    public int FirstNotRepeatingChar(String str) {
        int len = str.length();
        HashMap<Character,Integer> map = new HashMap<Character,Integer>();
        if(len==0||str==null)
            return -1;
        //第一次扫描
        for(int i = 0; i < len; i++){
            char c = str.charAt(i);//第i个索引对应的字符
            if(map.containsKey(c)){
                int value = map.get(c);//求键值对中的值
                map.put(c,value+1);
            }
            else{
                map.put(c,1);
            }
        }//for
        //第二次扫描
        for(int i = 0;i < len; i++){
            if(map.get(str.charAt(i))==1){
                return i;
            }
        }  //for
      return -1;
    }
}

相关文章

网友评论

      本文标题:50.第一个只出现一次的字符(简单)

      本文链接:https://www.haomeiwen.com/subject/xevdfhtx.html