前言:
贴纸,还得继续努力呀!!!!!!!!!!!!!
题目描述
在一个字符串(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;
}
}