Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.
Examples:
s = "leetcode" return 0. s = "loveleetcode", return 2.
Note: You may assume the string contain only lowercase letters.
---------------------------------------------------------------------------------------------------------------------
题意
找到字符串中第一个不重复出现的字母,返回其在字符串中的位置。
思路
这个我首先想到的是先把它转化为char数组,然后引入一个新的数组A,将原数组的值作为新数组A的索引,
将出现的次数作为新数组A的值。然后循环新数组A,得到出现次数为1的字符,然后得到其最小位置。
代码
public class Solution {
public int firstUniqChar(String s) {
if(s == "" || s == null || s == " ") return -1;
else{
char[] array = s.toCharArray();
int [] newArray = new int[27];
Map<Integer,Integer> map = new HashMap();
for(int i=0;i< array.length;i++){
int ddd = array[i] -'a'+1;
newArray[ddd]++;
map.put(ddd,i);
}
int minIndex = Integer.MAX_VALUE;
for(int i=0;i<newArray.length;i++){
if(newArray[i] ==1){
int index = map.get(i);
if(index<minIndex){
minIndex = index;
}
}
}
if(minIndex == Integer.MAX_VALUE){
minIndex = -1;
}
return minIndex;
}
}
}
其实我的方法是有点蠢了,还有一种方法,利用s.lastIndexOf(i)进行判断是否重复,然后比较索引大小,相比省去了很多步骤。
方法二:
public class Solution {
public int firstUniqChar(String s) {
int retIndex = Integer.MAX_VALUE;
int pos;
for(int i = 97; i < 123; i++){
pos = s.indexOf(i);
if(pos != -1 && pos == s.lastIndexOf(i)){
retIndex = pos < retIndex ? pos : retIndex;
}
}
if(retIndex != Integer.MAX_VALUE)
return retIndex;
return -1;
}
}