Найти количество вхождений символа в строку рекурсивно (java) - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь написать метод, который возвращает количество раз, когда первый символ строки появляется в строке. Это то, что я имею до сих пор,

public int numberOfFirstChar0(String str) {
    char ch = str.charAt(0);
    if (str.equals("")) {
        return 0;
    }

    if ((str.substring(0, 1).equals(ch))) {
        return 1 + numberOfFirstChar0(str.substring(1));
    }

    return numberOfFirstChar0(str);
}

, однако, это не похоже на работу (не возвращает правильный результат того, сколько вхождений в строке есть). Что-то не так с кодом? Любая помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 02 апреля 2020

Используются 2 функции, одна из которых рекурсивная. Мы получаем символ по первому индексу и массив символов из строки один раз, вместо того, чтобы делать это снова и снова и объединять строку. Затем мы используем рекурсию для продолжения работы с индексами массива символов.

Почему вы это сделаете, я понятия не имею. Простой for-l oop позволит добиться этого гораздо более простым способом.

    private static int numberOfFirstChar0(String str) {
        if (str.isEmpty()) {
            return 0;
        }
        char[] characters = str.toCharArray();

        char character = characters[0];

        return occurrences(characters, character, 0, 0);
    }

    private static int occurrences(char[] characters, char character, int index, int occurrences) {
        if (index >= characters.length - 1) {
            return occurrences;
        }
        if (characters[index] == character) {
            occurrences++;
        }
        return occurrences(characters, character, ++index, occurrences);
    }

Java 8 Решение

    private static long occurrencesOfFirst(String input) {
        if (input.isEmpty()) {
            return 0;
        }
        char characterAtIndexZero = input.charAt(0);

        return input.chars()
                .filter(character -> character == characterAtIndexZero)
                .count();
    }
0 голосов
/ 02 апреля 2020

Сделайте это следующим образом:

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(numberOfFirstChar0("arvindkumaravinash"));
    }

    static int numberOfFirstChar0(String str) {
        if (str == null || str.isEmpty()) {
            return 0;
        }
        if (str.length() == 1) {
            return 1;
        }
        if (str.length() == 2) {
            if (str.charAt(0) == str.charAt(1)) {
                return 2;
            } else {
                return 1;
            }
        }
        if (str.length() >= 3) {
            if (str.charAt(0) == str.charAt(1)) {
                return 1 + numberOfFirstChar0(String.valueOf(str.charAt(0)) + str.substring(2));
            } else {
                return numberOfFirstChar0(String.valueOf(str.charAt(0)) + str.substring(2));
            }
        }
        return 0;
    }
}

Выход:

4

Лог c прямо вперед. Не стесняйтесь комментировать в случае каких-либо сомнений / проблем.

0 голосов
/ 02 апреля 2020

Вот простой пример того, что вы ищете.

Код

    public static void main(String args[]) {
    //the string we will use to count the occurence of the first character
    String countMe = "abcaabbbdc";
    //the counter used
    int charCount=0;

    for(int i = 0;i<countMe.length();i++) {
        if(countMe.charAt(i)==countMe.charAt(0)) {
            //add to counter
            charCount++;
        }
    }
    //print results
    System.out.println("The character '"+countMe.charAt(0)+"' appears "+ charCount+ " times");
}

Вывод

The character 'a' appears 3 times
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...