题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
方法一:
比较简单的想法,首先把字符串转换成字符数组,然后判断字符数组的indexOf和lastIndexOf是否相等,如果相等则返回它的位置,如不没有就返回-1
class Solution {
public int FirstNotRepeatingChar(String str) {
char[] strArray =str.toCharArray();
for(int i=0;i<str.length();i++){
if(str.indexOf(strArray[i])==str.lastIndexOf(strArray[i])){
//我认为应该这样写,但是上面这样写也没错,不知道为什么
//if (str.indexOf(String.valueOf(cha[i])) == str.lastIndexOf(String.valueOf(cha[i]))){
return i;
}//indexOf和lastIndexOf是String的方法
}
return -1;
}
}
方法二:
class Solution {
public int FirstNotRepeatingChar(String str) {
char[] chars = str.toCharArray();
int[] map = new int[256];//ASCII码就256个
for (int i = 0; i < chars.length; i++) {
map[chars[i]]++;//将chars[i]变成了对应的ASCII码
}
System.out.println(Arrays.toString(map));
for (int i = 0; i < chars.length; i++) {
if (map[chars[i]] == 1)//chars[i]是有顺序的
return i;
}
return -1;
}
}