字符串中的第一个唯一字符

题目描述:

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

样例:

s = “leetcode”
返回 0.
s = “loveleetcode”,
返回 2.

分析:

建立哈希表存储每个字符以及字符对应的索引,并将该字符加入列表中。在遍历字符时首先判断该字符是否已经存在于哈希表,如果存在则将其从列表中移除;如果不存在则添加。直到最后如果列表不为空的话那么列表中的第一个元素即为首个不重复的字符。

public int FirstNotRepeatingChar(String str) {
		if(str==null||str.length()==0)
			return -1;
		int index=-1;
		Map<Character,Integer> set=new HashMap<>();
		List<Character> list=new ArrayList<>();
		for(int i=0;i<str.length();i++) {
			if(set.containsKey(str.charAt(i))) {
				if(list.contains(str.charAt(i)))
					list.remove((Character)str.charAt(i));
			}else {
				set.put(str.charAt(i),i);
				list.add(str.charAt(i));
			}
		}
		if(list.size()>0)
			index=set.get(list.get(0));
        return index;
    }

相关题目:字符流中第一个只出现一次的字符
请实现一个函数用来找出字符流中第一个只出现一次的字符。
例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是’g’。
当从该字符流中读出前六个字符”google”时,第一个只出现一次的字符是’l’。
如果当前字符流没有存在出现一次的字符,返回#字符。

List<Character> list=new ArrayList<>();
	Set<Character> set=new HashSet<>();
	 //Insert one char from stringstream   
    public void insert(char ch){
        if(set.contains(ch)) {
        	if(list.contains(ch))
        		list.remove((Character)ch);
        }else {
        	set.add(ch);
        	list.add(ch);
        }
    }
    //return the first appearence once char in current stringstream
    public char firstAppearingOnce(){
        if(list.size()>0)
        	return list.get(0);
        else
        	return '#';
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值