Como acelerar a primeira pesquisa de personagem exclusiva
Estou resolvendo 387. Primeiro caractere exclusivo de uma string LeetCode problema definido como:
Dada uma string, encontre o primeiro caractere não repetitivo e retorne seu índice. Se não existir, retorne -1.
Exemplos
s = "leetcode"
return 0.
s = "loveleetcode",
return 2.
Nota Você pode supor que a string contenha apenas letras minúscula
proveitando a vantagem da entrada ser totalmente ASCII em minúsculas, criei vetores de dois bits para rastrear quando encontramos um caractere pela primeira e pela segunda ve
O código abaixo pode ser melhorado ainda mais? O LeetCode diz que o código abaixo é melhor que as soluções de 94,33%. O que mais poderia ter sido feito pelas últimas soluções de 5,67% de que elas eram melhores?
class Solution {
public int firstUniqChar(String s) {
int firstSpot = 0;
int secondSpot = 0;
char[] chars = s.toCharArray();
for (char c : chars) {
int mask = 1 << c - 'a';
if ((firstSpot & mask) == 0) {
firstSpot |= mask;
} else if ((secondSpot & mask) == 0) {
secondSpot |= mask;
}
}
int i = 0;
for (char c : chars) {
int mask = 1 << c - 'a';
if ((secondSpot & mask) == 0) {
return i;
}
i++;
}
return -1;
}
}
Existem truques que podem ser feitos para melhorar a pontuação do LeetCode? Parece quefor-each
loop executa melhor que o padrãofor
loop, mas não posso provar, é uma observação baseada em algumas das minhas observações anteriore