剑指Offer:第一个只出现一次的字符位置

题目

在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置。例如 输入“abaccdeff” 则输出1

分析

通过观潮题目我们发现这道题与字符出现的次数有关(第一个只出现一次的字符)。所以我们可以遍历一遍字符串,统计出每个字符出现的次数,然后第二次再遍历的时候,第一个出现次数为1的字符就是符合要求的,输出他的下标就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.ArrayList;
public class Solution {
public int FirstNotRepeatingChar(String str) {
char[] c = str.toCharArray();
int[] a = new int[200];
for (char ch : c)
a[(int) ch]++;
for (int i = 0; i < c.length; i++)
if (a[(int) c[i]] == 1)
return i;
return -1;
}
}