Самый простой способ проверить, состоит ли строка из уникальных символов? - PullRequest
9 голосов
/ 16 марта 2010

Мне нужно проверить в Java, состоит ли слово из уникальных букв (без учета регистра). Поскольку прямое решение скучно, я придумал:

  1. Для каждого символа в строке проверьте, если indexOf(char) == lastIndexOf(char).
  2. Добавьте все символы в HashSet и проверьте, установлен ли размер == длина строки.
  3. Преобразование строки в массив символов, сортировка по алфавиту, циклический просмотр элементов массива и проверка, если c[i] == c[i+1].

В настоящее время я люблю # 2 больше всего, кажется, самый простой способ. Какие-нибудь другие интересные решения?

Ответы [ 12 ]

0 голосов
/ 29 декабря 2013

Вы можете оптимизировать первое решение (indexof == lastindexof), просто проверив условие для всех 26 алфавитов, т.е. для a, b, c, d, .., z. Таким образом, вам не нужно проходить всю строку.

0 голосов
/ 13 октября 2013

Вот код, который я написал для ответа Каче (от взлома кода и изменения):

public boolean check() {
    int[] checker = new int[8];
    String inp = "!a~AbBC#~";
    boolean flag = true;
    if (inp.length() > 256)
        flag = false;
    else {
        for(int i=0;i<inp.length();i++) {
            int x = inp.charAt(i);
            int index = x/32;
            x = x%32;
            if((checker[index] & (1<<x)) > 0) { 
                flag = false;
                break;
            }
            else
                checker[index] = checker[index] | 1<<x;
        }
    }
    return flag;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...