Я сгенерирую hasmap на основе примера слова и остальных алфавитов, которые меня не волнуют.
Например, если слово "машина"
моя хеш-таблица будет выглядеть так:
а, 0
б, MAX
с, 1
д, MAX
е, MAX
...
..
г, 2
,
В результате любой, имеющий больше 3, будет считаться не соответствующим
(больше настроек ...)
И мой метод сравнения будет сравнивать сумму хеша в самом вычислении хеша. Он не будет продолжаться, если сможет определить, что слово не равно.
public static HashMap<String, Integer> getHashMap(String word) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
String[] chars = word.split("");
int index = 0;
for (String c : chars) {
map.put(c, index);
index++;
}
return map;
}
public static int alphaHash(String word, int base,
HashMap<String, Integer> map) {
String[] chars = word.split("");
int result = 0;
for (String c : chars) {
if (c.length() <= 0 || c.equals(null)) {
continue;
}
int index = 0;
if (map.containsKey(c)) {
index = map.get(c);
} else {
index = Integer.MAX_VALUE;
}
result += index;
if (result > base) {
return result;
}
}
return result;
}
Основной метод
HashMap<String, Integer> map = getHashMap(sample);
int sampleHash = alphaHash(sample, Integer.MAX_VALUE, map);
for (String s : args) {
if (sampleHash == alphaHash(s, sampleHash, map)) {
System.out.print(s + " ");
}
}