Nano Hash - криптовалюты, майнинг, программирование

найти повторяющийся символ в строке

Как я могу найти отчетливый повторяющийся символ в строке с помощью Java.

Для строки 4567895443577

Здесь первый отчетливый повторяющийся символ — 5.

Ip:n:1 output:4
   n=2     op=5
   n=3     op=7
   n=4     op=doest exist
27.07.2011

  • Это может вам помочь - stackoverflow.com/questions/664194/ 27.07.2011
  • Я не понимаю... Сначала повторяется 4, как в 44, или как в первом символе, который появляется дважды? Если последнее, то нет, 5 есть. 27.07.2011
  • @constantlearner: что должно возвращаться (112233,3)? 3 или ноль? что должно возвращать (4554,1)? 4 или 5? 27.07.2011
  • этот вопрос на самом деле звучит как домашнее задание 27.07.2011

Ответы:


1

Это можно сделать с помощью следующего кода.

Я использовал ключи HashMap в качестве входных символов и значение в качестве счетчика.

String str = "4567895443577";
char[] chars = str.toCharArray();
HashMap<Character, Integer> charMap = new HashMap<Character, Integer>();
for( char c : chars )
{
    if( charMap.containsKey( c ) ){
        charMap.put(c, charMap.get(c) + 1 );
    }else{
        charMap.put(c, 1);
    }
}
for( Entry<Character, Integer> entry : charMap.entrySet() )
{
    System.out.println( "Character '"+entry.getKey()+"' is repeated for '"+entry.getValue()+"' times." );
}
27.07.2011

2

создайте HashSet и HashMap: set,map и int count=0, выполните итерацию по строке и добавьте каждый символ и его индекс. в конце - значение каждого символа будет ПОСЛЕДНИМ индексом.
снова выполните итерацию по строке и проверьте, соответствует ли индекс тому, что отображается на карте. если есть (или персонаж появляется в наборе) - игнорируйте.
если персонажа нет в наборе, а индекс как есть и как в карте не совпадают - увеличиваем счетчик (пока не достигнет n).

сложность: O(n)

public static Character findN(String str,int n) { 
    HashMap<Character, Integer> map = new HashMap<Character, Integer>();
    int len = str.length();
    for (int i=0;i<len;i++) { 
        map.put(str.charAt(i),i);
    }
    int count=0;
    HashSet<Character> set = new HashSet<Character>();
    for (int i=0;i<len;i++) {
        if (set.contains(str.charAt(i))) continue;
        if (map.get(str.charAt(i)) != i) {
            count++;
            if (count == n) return str.charAt(i);
            set.add(str.charAt(i));
        }
    }
    return null; //it does not exist

}
27.07.2011

3

Это должно работать:

public static char findChar(String s, int length) {
int[] counts = new int[10];

// iterate over the letters and increment the count
int stringLength = s.length();
for(int i = 0; i < stringLength; i++ ) {
    char c = s.charAt(i);
    int value = Character.getNumericValue(c);
    counts[value]++;
}

int counter = 0; // how many chars repeated so far
for(int i = 0; i < stringLength; i++ ) {
    char c = s.charAt(i);
    int value = Character.getNumericValue(c);
    if(counts[value] >= 2) {

    counts[value] = -1; // do not count this twice
    counter++;

    if(counter == length) {
        return c;
    }
    }
}
return '\u0000'; // null char
}
27.07.2011
  • что вернет findChar(4554,2)? он должен вернуть «4». также я считаю, что findChar (112233,3) вернет ноль, хотя предполагается, что он возвращает «3». 27.07.2011
  • (4554,2) должен вернуть 5, так как «5» — это первое число, которое появляется дважды. (112233,3) должен возвращать ноль, поскольку в строке нет числа, которое встречается 3 раза. 27.07.2011
  • также совет: никогда не put i<s.length() в качестве стоп-условия. в цикле не полагайтесь на оптимизацию компилятора, возможно, потребуется выполнить итерацию всей коллекции/строки, чтобы найти length() [при условии, что мы не знаем, как реализуется length()] 27.07.2011
  • один из нас ошибся. Я считаю, что ОП хочет вернуть n-й символ, который повторяется более одного раза. 27.07.2011
  • @amit, тогда в примере, данном спрашивающим, ответ для n=2 должен быть 4 27.07.2011
  • нет, потому что 4 стоит перед 5, как в его примере (s,1)=4, а не 5. 27.07.2011
  • Привет, для ввода 2 это второй повторяющийся символ, а не столько раз, сколько он повторяется. Спасибо. 27.07.2011
  • @constantlearner хорошо, я понял и исправил свой код, проверьте его 27.07.2011

  • 4

    Вы должны создать HashSet, который реализует Set Интерфейс.

    Коллекция, не содержащая повторяющихся элементов. Более формально, наборы не содержат пары элементов e1 и e2, таких что e1.equals(e2), и не более одного нулевого элемента. Как следует из названия, этот интерфейс моделирует математическую абстракцию множеств.

    27.07.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..