剑指offer 50 -第一个只出现一次的字符-简单哈希表-java-charAt()方法

题目:

 2.思路

最直接的思路就是,遍历这个字符串,当访问到某个字符的时候将其后边的字符串进行比较,如果与后边的字符串没有发现重复的,则该字符就是只出现一次的字符

但是考虑到时间复杂度,我们可以采用哈希表的方式来进行处理

本题是看第一个只出现一次字符所在位置,和哈希表,根据给定的关键字找出其在表中的位置很相似。

  1.该题可以采用哈希表的方法
    2.a-z的ascII为65-122 A-Z的ascII为97-122
    可以将65-122作为键值,构成一个数组,
    3.第一次扫面数组,每扫描到一个字符就在对应位置+1
    4.第二次扫描数组,读取其中值为1的数据

在代码中要注意到的是(int)(str.charAt(i)),这句话的意思找到字符串str 在位置i中的字符并将其转化为int类型转化为了其对应的ascII值

代码:

public class Solution {
    /**
    1.该题可以采用哈希表的方法
    2.a-z的ascII为65-122 A-Z的ascII为97-122
    可以将65-122作为键值,构成一个数组,
    3.第一次扫面数组,每扫描到一个字符就在对应位置+1
    4.第二次扫描数组,读取其中值为1的数据
    **/
    public int FirstNotRepeatingChar(String str) {
       int[] word=new int[58];//122-65+1=58
        for(int i=0;i<str.length();i++){
           word[((int)str.charAt(i))-65] += 1;//str.charAt(i)字符串里的第i个字符
        }
        for(int i=0;i<str.length();i++){
            if(word[(int)(str.charAt(i))-65]==1) //这部分很重要
                return i;
        }
        return -1;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值