387.文字列の最初の一意文字Leetcode
文字列を指定して、最初の重複しない文字を見つけて、インデックスを返します.存在しない場合は-1を返します.
ケース:
s=「leetcode」は0を返します.
s=「loveleetcode」は、2.
注意事項:この文字列には小文字だけが含まれていると仮定してもいいです.
ケース:
s=「leetcode」は0を返します.
s=「loveleetcode」は、2.
注意事項:この文字列には小文字だけが含まれていると仮定してもいいです.
// o(n^2) 【 】
class Solution {
public int firstUniqChar(String s) {
int n = s.length();
for(int i = 0; i < n; i++){
boolean flag = true; //
for(int j = 0; j < n; j++){
if(s.charAt(i) == s.charAt(j) && i != j){ // ,
flag = false;
break;
}
}
if(flag == true)
return i;
}
return -1;
}
}
/*
:O(n)
【HashMap】
1
*/
class Solution{
public int firstUniqChar(String s){
int n = s.length();
Map<Character, Integer> charMap = new HashMap<Character, Integer>(n); // ,
for(int i = 0; i < n; i++){
if(!charMap.containsKey(s.charAt(i))){
charMap.put(s.charAt(i), 1);
}else{
charMap.put(s.charAt(i), charMap.get(s.charAt(i)) + 1);
}
}
for(int i = 0; i < n; i++){
if(charMap.get(s.charAt(i)) == 1)
return i;
}
return -1;
}
}
class Solution{
public int firstUniqChar(String s){
int n = s.length();
char[] array = s.toCharArray();
int[] a = new int[26]; //a[] ,
for(int i = 0; i < n; i++){
a[array[i] - 'a']++;
}
for(int i = 0; i < n; i++){
if(a[array[i] - 'a'] == 1)
return i;
}
return -1;
}
}