您的位置:首页 > 其它

第一个只出现一次的字符(LinkedHashMap与HashMap)

2019-03-20 22:08 13 查看
版权声明:如需转载,请写明出处 https://blog.csdn.net/weixin_43113679/article/details/88701593

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

import java.util.LinkedHashMap;
import java.util.Map;
public class Solution {
public int FirstNotRepeatingChar(String str) {

if(str.length()<1){
return -1;
}
char[] ch =str.toCharArray();
Map<Character,Integer> map = new LinkedHashMap();
for(int i =0;i<ch.length;++i){
if(map.containsKey(ch[i])==false){
map.put(ch[i], i);
}else{
map.put(ch[i],-1);
}
}
int index=-1;
for(Character c:map.keySet()){
if(map.get(c)>=0){
index =map.get(c);
break;
}
}
return index;
}
}

主要说一下一开始自己用的hashmap但是在最后一个for循环遍历时出现了问题,答案虽然也对,但是不是正确答案,只是只出现第一次的字符之一,还不是第一个:
因为hashmap底层是散列表,数据存储与插入顺序无关,比如依次put进q,w,e字符,可能遍历的时候是e,w,q的顺序。而linkedhashmap底层有一个双向循环链表来维护其存储顺序,遍历的时候是按照插入顺序来遍历的。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: