题目描述:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
- s = "leetcode" , 返回 0。
- s = "loveleetcode",返回 2。
思路:定义数组,长度为 26,代表 26 个字母,遍历字符串,将该字符出现次数记录下来,再次遍历字符串,判断该字符出现次数是否为 1,若是 1,则该字符就是第一个唯一字符,若遍历后也没有返回,则该字符串没有唯一字符。
Java实现
public class FirstUniqChar {
public static int firstUniqChar(String s) {
int[] a = new int[26];
for(int i = 0;i < s.length();i++){
a[s.charAt(i) - 'a']++;
}
for(int i = 0;i < s.length();i++){
if(a[s.charAt(i) - 'a'] == 1){
return i;
}
}
return -1;
}
public static void main(String[] args) {
String s = "loveleetode";
System.out.println(firstUniqChar(s));
}
}
C语言实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int FirstUniqChar(char s[],int len){
int a[26] = { 0 };
int i = 0;
for (i = 0; i < len; i++){
a[s[i] - 'a'] ++;
}
for (i = 0; i < len; i++){
if (a[s[i] - 'a'] == 1){
return i;
}
}
return -1;
}
int main(){
char str[] = "leetvodeyiqw";
printf("%d\n",FirstUniqChar(str,strlen(str)));
system("pause");
return 0;
}