美文网首页
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