кодесурса

Упражнения на Java: найдите все начальные индексы анаграмм данной строки в другой указанной строке

script1adsense2code
script1adsense3code

Java Basic: упражнение 188 с решением

Напишите программу на Java, чтобы найти все начальные индексы анаграмм данной строки в другой данной строке.

Иллюстрированная презентация:


Пример решения:

Java-код:

import java.util.*;
public class Solution {
 public static void main(String[] args) {
  String str1 ="zyxwyxyxzwxyz";
  String str2 ="xyz";
  System.out.println("Original String: " + str1);
  System.out.println("Starting anagram indices of " + str2 + ": " + find_Anagrams(str1, str2));
 }
 public static List < Integer > find_Anagrams(String str1, String str2) {
  List < Integer > list = new ArrayList < Integer > ();
  if (str1.length() < str2.length() || str2.length() < 1) {
   return list;
  }
  if (str1.equals(str2)) {
   list.add(0);
   return list;
  }
  HashMap < Character, Integer > map = new HashMap < > ();
  for (char c: str2.toCharArray()) {
   if (map.containsKey(c)) {
    map.put(c, map.get(c) + 1);
   } else {
    map.put(c, 1);
   }
  }
  int str2_length = str2.length();
  int current_length = 0;
  int correct_chars = 0;
  for (int i = 0; i < str1.length(); ++i) {
   current_length++;
   if (map.containsKey(str1.charAt(i))) {
    int ctr = map.get(str1.charAt(i));
    if (ctr > 0) {
     correct_chars++;
    }
    map.put(str1.charAt(i), ctr - 1);
   }
   if (current_length == str2_length) {
    int begin_pos = i - str2_length + 1;
    if (correct_chars == str2_length) {
     list.add(begin_pos);
    }
    if (map.containsKey(str1.charAt(begin_pos))) {
     int ctr = map.get(str1.charAt(begin_pos));
     if (ctr >= 0) {
      correct_chars--;
     }
     map.put(str1.charAt(begin_pos), ctr + 1);
    }
    current_length--;
   }
  }
  return list;
 }
}

Пример вывода:

 Исходная строка: zyxwyxyxzwxyz
Начальные индексы анаграммы xyz: [0, 6, 10]

Блок - схема:

«Блок-схема:

Редактор кода Java:

Компания: Amazon

Внесите свой код и комментарии через Disqus.

Предыдущий: Напишите программу на Java, чтобы найти индекс первого неповторяющегося символа в данной строке.
Далее: Напишите программу на Java. Для двух неотрицательных целых чисел num1 и num2, представленных в виде строки, возвращайте сумму num1 и num2.

Каков уровень сложности этого упражнения?

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code