前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天一道剑指offer-第一个只出现一次的字符

每天一道剑指offer-第一个只出现一次的字符

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

题目

每天一道剑指offer-第一个只出现一次的字符

https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?tpId=13&tqId=11187&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目详述

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

思路

  • 字符串中的字符都是英文的字母,所以每一个字母都有一个ASCII码与其对应,然后建立一个字符数组长度是256,可以把每一个字符对应一个数组的下标
  • 然后设立一个index!然后比如字符a第一次出现那么strArray[a字符对应的ASC码] = index;然后如果下一次a再出现了,那么strArray[a字符对应的ASC码] = -1;这样子做,只要字符出现了大于等于2次,都会这样子等于-1
  • 而只出现一次的字符,由于index这个变量是每次递增的!我们只需要遍历一遍,找index最小的那个字符。

题目详解

代码语言:javascript
复制
public class Solution {
    public int FirstNotRepeatingChar(String str) {
        if(str.equals(""))
            return -1;
        int [] temp = new int[256];
        int index = 1;
        char [] strArray = str.toCharArray();
        for(int i=0;i<strArray.length;i++)
        {
            if(temp[(int)strArray[i]] == 0)
            {
                temp[(int)strArray[i]] = index;
                index++;
            }else{
                temp[(int)strArray[i]] = -1;
            }
        }//这个循环就是遍历一遍,找到出现一次的字符
        //只要index大于0就是出现一次的字符
        int minIndex = Integer.MAX_VALUE;
        char ch = '1';
        for(int i=0;i<temp.length;i++)
        {
            if(temp[i] > 0)
            {
                if(temp[i] < minIndex)
                {//找最小的index对应的字符
                    minIndex = temp[i];
                    ch = (char)i;
                }
            }
        }
        int result = -1;
        for(int i=0;i<strArray.length;i++)
        {//去找这个字符的下标!
            if(strArray[i] == ch)
                return i;
        }
        return -1;
    }
}

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

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

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

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

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