题目:
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;
}
}