#java #алгоритм
Как можно модифицировать данный алгоритм, чтобы после определения индекса первого вхождения подстроки в строку, он продолжить искать такие же подстроки в строке до ее окончания, а не выходил после первого нахождения. public int substring(String file, String value) { int fileLength = file.length(); int valueLength = value.length(); if (valueLength > fileLength) { return -1; } HashMapcascade = new HashMap (); for (int i = 0; i <= 255; i++) { cascade.put((char) i, valueLength); } for (int i = 0; i < valueLength - 1; i++) { cascade.put(value.charAt(i), valueLength - i - 1); } int i = valueLength - 1; int j = i; int k = i; while (j >= 0 && i <= fileLength - 1) { j = valueLength - 1; k = i; while (j >= 0 && file.charAt(k) == value.charAt(j)) { k--; j--; } i += cascade.get(file.charAt(i)); } if (k >= fileLength - valueLength) { return -1; } else { return k + 1; } }
Ответы
Ответ 1
Если решение данной задачи преследует не учебную или академическую, а практическую цель, можно воспользоваться регулярными выражениями. Ниже пример, который находит в строке все подстроки состоящие из буквы "А" и выводит позицию с которой начинается каждая из них. import java.util.regex.Matcher; import java.util.regex.Pattern; . . . Pattern pattern = Pattern.compile("А+"); String s = "АААБББГГГААРРПТВВАААА0"; Matcher matcher = pattern.matcher(s); while(matcher.find()){ System.out.println("Позиция: " + matcher.start()); }
Комментариев нет:
Отправить комментарий