给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode" 返回 0. s = "loveleetcode",
返回 2.
思路一:若不要求时间,那么较简单
public int firstUniqChar(String s) {//时间复杂度o(n^2)
char[] c = s.toCharArray();
//System.out.println(c.length);
int[] flag = new int[c.length];
int index = -1;
Arrays.fill(flag, 0);
for(int i = 0 ; i < c.length; i++){
for(int j = i+1; j < c.length; j++){
if(c[i] == c[j]){
flag[i] = 1;
flag[j] = 1;
}
}
}
for(int i = 0 ;i < flag.length ; i++){
System.out.println(flag[i]);
}
for(int i = 0 ;i < flag.length ; i++){
if(flag[i] == 0){
index = i;
return index;
}
}
return index;
}
思路二:若要求时间复杂度,那么空间换时间,用一个数组存放每个字符出现的次数
public int firstUniqChar_2(String s){//时间换空间,用数组存放每个字符出现的次数
int[] nums = new int[256];
int index = -1;
Arrays.fill(nums, 0);
for(int i = 0 ; i < s.length(); i++){
nums[s.charAt(i)]++;
}
for(int i = 0; i<s.length(); i++){
if(nums[s.charAt(i)] == 1){
index = i;
break;
}
}
return index;
}