Défi Codingbat : mirrorEnds utilisant l'API Stream

Eugène Khlebnikov

Étant donné la tâche mirrorEnds de CodingBat :

Étant donné une chaîne, recherchez une chaîne d'image miroir ( vers l' arrière ) au début et à la fin de la chaîne donnée.

En d'autres termes, zéro ou plusieurs caractères au tout début de la chaîne donnée et à la toute fin de la chaîne dans l'ordre inverse ( éventuellement en chevauchement ). Par exemple, la chaîne "abXYZba"a la fin miroir "ab".

Exemples:

mirrorEnds("abXYZba")  →  "ab"
mirrorEnds("abca")     →  "a"
mirrorEnds("aba")      →  "aba"

Ma solution pour cette tâche est la suivante :

public String mirrorEnds(String str) {
  String result = "";
  
  if (str.length() % 2 != 0) {
    for (int i = 0; i < str.length() / 2; i++) {
      if (str.charAt(i) == str.charAt(str.length() - i - 1)) {
        result += "" + str.charAt(i);
      } else {
        break;
      }
    }
    
    if (result.length() == str.length() / 2) {
      String strEnd = new StringBuilder(result).reverse().toString();
      result += "" + str.charAt(str.length() / 2) + strEnd;
    } 
  }
  
  if (str.length() % 2 == 0) {
    for (int i = 0; i < str.length() / 2; i++) {
      if (str.charAt(i) == str.charAt(str.length() - i - 1)) {
        result += "" + str.charAt(i);
      } else {
        break;
      }
    }
    
    if (result.length() == str.length() / 2) {
      String strEnd = new StringBuilder(result).reverse().toString();
      result += strEnd;
    }
  }
  
  return result;
}

Est-il possible de résoudre ce problème en utilisant l' API Stream ?

Et

Puisque vous demandez délibérément une solution de flux à ce problème, cela pourrait être de rechercher le plus grand index ioù les premiers icaractères correspondent aux derniers icaractères inversés, en icommençant par length() / 2et en procédant par décrémentation ijusqu'à ce qu'il atteigne 0.

L'algorithme précédent n'a de sens que si la chaîne donnée n'est pas un palindrome. En fait, dans ce cas, la chaîne elle-même pourrait être renvoyée immédiatement.

public static String mirrorEnds(String str) {
    if (str.equals(new StringBuilder(str).reverse().toString())) {
        return str;
    }

    OptionalInt maxLen = IntStream.iterate(str.length() / 2, i -> i >= 0, i -> i - 1)
            .filter(i -> str.substring(0, i).equals((new StringBuilder(str.substring(str.length() - i))).reverse().toString()))
            .max();

    return maxLen.isPresent() ? str.substring(0, maxLen.getAsInt()) : null;
}

Production

ab
a
aba

Voici un lien pour tester le code :

https://www.jdoodle.com/iembed/v0/rUL

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

Codingbat challenge: mirrorEnds Stream API Solution

Défi Codingbat : solution d'API zeroFront Stream

Défi Codingbat : solution d'API de flux sumNumbers

Défi Codingbat : solution d'API de flux zeroMax

Défi Codingbat : solution d'API de flux sameEnds

Défi Codingbat : maxBlock

рекурсивное упражнение по codingbat

Рекурсия codingbat

Appel d'API synchrone utilisant l'exécution de mise à niveau

Comment interagir avec l'API hackage en utilisant curl ?

Метод сокращения Stream API не работает при добавлении элементов

Обновить существующую функцию с помощью stream api

Stream API отличается по имени и максимальным значением

Есть ли способ «расширить» список объектов в больший список с помощью Stream API?

Как правильно сортировать элементы при изменении значений элементов по Stream API

Создание плоского дерева с помощью Stream API

Как его переписать с помощью stream api

Использование Stream API для пополнения коллекции

Проблема с фильтрацией коллекции с использованием Stream API

Как суммировать с Stream api?

Получите отсортированный список с карты через Stream API

Распечатайте уникальные значения из коллекции с помощью Stream API

Можно переписать следующий цикл с помощью stream api или я тщетно пытаюсь?

объединять потоки для создания чередующейся последовательности с использованием лямбда-выражения или Stream API

Уменьшить и назначить с помощью Stream api для нескольких переменных

Использование Stream API для подсчета статистики

«Хороший» метод для вызова метода для каждого объекта с использованием Stream API

Как применить два фильтра к одному списку с помощью Stream api

Stream Api - разделить запятыми, исключить вложенные запятые

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    TypeError: store.getState não é uma função. (Em 'store.getState ()', 'store.getState' é indefinido, como posso resolver esse problema?

  3. 3

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  4. 4

    Как добавить Swagger в веб-API с поддержкой OData, работающий на ASP.NET Core 3.1

  5. 5

    How to click an array of links in puppeteer?

  6. 6

    Merging legends in plotly subplot

  7. 7

    ViewPager2 мигает / перезагружается при смахивании

  8. 8

    Отчеты Fabric Debug Craslytic: регистрация, отсутствует идентификатор сборки, применить плагин: io.fabric

  9. 9

    How to normalize different curves drawn with geom = "step" when using stat_summary

  10. 10

    无法通过Vue在传单中加载pixiOverlay

  11. 11

    как я могу удалить vue cli 2?

  12. 12

    Как я могу нарисовать заполненный прямоугольник в JFreeChart?

  13. 13

    SQL Вычтите две строки друг от друга в одном столбце, чтобы получить результат

  14. 14

    Elasticsearch - Нечеткий поиск не дает предложения

  15. 15

    Single legend for Plotly subplot for line plots created from two data frames in R

  16. 16

    Описание моего типа Parser как серии преобразователей монад

  17. 17

    Как изменить цвета запятых и скобок в VS Code

  18. 18

    Сброс значения <input type = "time"> в Firefox

  19. 19

    Почему прокси в vue.config.js 404

  20. 20

    Как установить параметр -noverify с gradle ktx для робоэлектрических тестов Android?

  21. 21

    В чем разница между ifstream, ofstream и fstream?

популярныйтег

файл