伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

死磕算法3、字符串中的第一个唯一字符

来源:本站原创 浏览:61次 时间:2022-11-20
题目

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

示例
s = "leetcode"
返回 0

s = "loveleetcode"
返回 2
  1. 解法一最简单可以使用HashMap,首先记录每个字符出现的次数,然后再次遍历,找到第value值是1的字符。
public static int firstUniqChar(String s) {
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
        }
        for (int i = 0; i < s.length(); i++) {
            if (map.get(s.charAt(i))==1){
                return i;
            }
        }
        return -1;

    }
  1. 解法二

这种方法很巧妙使用了indexOf和lastIndexOf方法,假设在遍历'a'的时候,indexOf('a')=0,但是lastIndexOf(‘a’)=10,那么最终条件是true && false,结果是false。

在来看在遍历i的时候,indexOf('i')=5,lastIndexOf('i')也=5,运算结果true && true,则赋值res,这里用了三元表达式,如果是第一次进入这个条件,那么res就等于第一次找出的字符下标,如果不是第一次进入这个条件,那么res就不是-1,则进行Math.min(res, index)取下标最小的一个索引。

这里有人问为什么不在条件成立后直接返回index,原因是遍历是从a-z,而字符是乱序的。

public static void main(String args[]) {
    System.out.println(firstUniqChar("abcdeiedcba"));
}
public static int firstUniqChar(String s) {
    int res = -1;
    for (char ch = 'a'; ch <= 'z'; ch++) {
        int index = s.indexOf(ch);
        if (index != -1 && index == s.lastIndexOf(ch)) {
            res = res == -1 ? index : Math.min(res, index);
        }
    }
    return res;
}


  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net