前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天一道leetcode387-字符串中第一个唯一的字符

每天一道leetcode387-字符串中第一个唯一的字符

作者头像
乔戈里
发布2019-09-17 15:09:39
3480
发布2019-09-17 15:09:39
举报
文章被收录于专栏:Java那些事

昨天的题解

题目

每天一道leetcode387-字符串中第一个唯一的字符 分类:字符串

题目详述

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

案例:

s = "leetcode" 返回 0.

s = "loveleetcode", 返回 2.

注意事项:您可以假定该字符串只包含小写字母。

题目详解

思路

  • 由于只有26个小写字母,可以把用一个数组表示26个字母,数组长度26,第0位代表a,第1位代表b,….(这里利用ASC码进行转换)
  • 首先设置一个index=1,然后遍历字符串s,如果数组中比如对于字符串中a来说,也就是数组下标为0,array[0]如果字符a第一次出现,那么array[0] = index;然后index++;每第一次出现就把对应的数组下标赋值为index;
  • 如果已经出现了,那么array[i]必然是一个不等于0的大于0的数,那么就把array[i] = -1;
  • 一趟循环以后,遍历array数组,找到不等于-1的(出现两次及以上)不等于0的 (要出现,等于0就是没出现),然后在里面找index数字最小的,因为在前面index每次都会进行自增,所以index最小的第一次出现的字符

代码

代码语言:javascript
复制
class Solution {
    public int firstUniqChar(String s) {
        int index = 1;
        int [] array = new int [26];//数组
        for(int i=0;i<s.length();i++)
        {
            int cha  = (int)s.charAt(i) - 97;//根据ASC码 字符转数组下标
            if(array[cha] == 0)//说明第一次出现
            {
                array[cha] = index;//把index值赋值给他
                index++;//然后index务必+1,这样字符串中以后的字符就算第一次出现,也是index值比第一个第一次出现的index的值大的。
            }else{
                array[cha] = - 1;//如果已经出现了,那么就数组赋值为-1
            }
        }
        int resultIndex = Integer.MAX_VALUE;
        char result = '#';
        for(int i=0;i<array.length;i++)
        {//遍历数组,找到index最小的那个字符
            if(array[i] > 0)
            {
                if(array[i] < resultIndex)//每次都找较小的index的,因为index越小,在字符串的位置越靠前,也就是越靠近第一次出现的字符
                {
                    resultIndex = array[i];
                    result = (char)(i+97);
                }
            }
        }
        if(result == '#')
            return -1;//没找到,返回-1
        for(int i=0;i<s.length();i++)
        {
            if(s.charAt(i) == result)
                return i;//因为要返回字符在字符串的下标,所以去字符串中去寻找字符的下标,然后返回。
        }
        return -1;
}
}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员乔戈里 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 昨天的题解
    • 题目
      • 题目详述
        • 题目详解
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档