考点:本题考查时间空间效率的平衡
题目描述
在一个字符串(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;
}
}
网友评论