[每日一道小算法(六十四)][字符串] 第一个只出现一次的字符(剑指offer)

前言:
贴纸,还得继续努力呀!!!!!!!!!!!!!

题目描述

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

解题思路

这道题我就想到了记录每个字符出现的次数来解决这道题。可以使用Hash表来进行记录。这里我使用的数组来进行统计每个字母出现的次数。声明一个长度为58的数组。为什么是58呢?主要是由于A-Z对应的ASCII码为65-90,a-z对应的ASCII码值为97-122。每个字符的index = ASCII - 65。这样只需要58个就够了。不用申请多余的内存,节省了内存空间。

代码样例

package com.asong.leetcode.FirstNotRepeatingChar;


/**
 * 第一个只出现一次的字符
 * 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)
 */
public class Solution {
    public int FirstNotRepeatingChar(String str) {
        int[] count = new int[58];
        for (int i = 0; i < str.length(); i++) {
            count[str.charAt(i) - 'A']++;
        }
        for (int i = 0; i < str.length(); i++) {
            if(count[str.charAt(i)-'A']==1)
            {
                return i;
            }
        }
        return -1;
    }
}

发布了197 篇原创文章 · 获赞 73 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39397165/article/details/104465894