new 第一次只出现一次的字符

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/mengmengkuaipao/article/details/102647697

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

直接

从头开始扫描字符中的每一个字母,那这个字母和后面的每个数比较,时O(n^2)

哈希表HashMap

import java.util.*;
public class Solution {
    public int FirstNotRepeatingChar(String str) {
        if(str==null||str.length()==0)
            return -1;
        HashMap<Character,Integer> map=new HashMap<>();
        for(int i=0;i<str.length();i++){
            if(map.containsKey(str.charAt(i))){
                int value = map.get(str.charAt(i));
                map.put(str.charAt(i),++value);
                
            }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;
    }
}

类哈希表

//用一个类似hash的东西来存储字符出现的次数,很方便

//其实这个第二步应该也是ka我的地方,没有在第一时间想到只要在遍历一遍数组并访问hash记录就可以了

public class Solution {
    public int FirstNotRepeatingChar(String str) {
        if(str==null||str.length()==0)
            return -1;
        int[] count=new int[256];
        for(int i=0;i<str.length();i++){
            count[str.charAt(i)]++;
        }
        for(int i=0;i<str.length();i++){
            if(count[str.charAt(i)]==1)
                return i;
        }  
        return -1;
    }
}

每一个数找到对应值O(1),n个数时间复杂度O(n)

总结

1.HashMap用法
HashMap<Character,Integer> map=new HashMap<>();
map.containsKey()
map.put()
map.get()

for(int i=0;i<str.length();i++){
            if(map.containsKey(str.charAt(i))){
                int value = map.get(str.charAt(i));
                map.put(str.charAt(i),++value);
                
            }else{
                map.put(str.charAt(i),1);
            }
                

2.类哈希表
使用整数数组替换Map
int [26] 字母a-z
int 【128】ASCII码
int 【256】 扩展ASCII码

3.length和 length()区别

在java中String类可以定义字符串变量和字符串数组,length()用于求String字符串对象的长度,而length用
于求String字符串数组的长度。
length()是求String字符串对象中字符的个数,而length是求字符串数组中有多少个字符串。
添加链接描述

猜你喜欢

转载自blog.csdn.net/mengmengkuaipao/article/details/102647697