#java #алгоритм
Как можно модифицировать данный алгоритм, чтобы после определения индекса первого
вхождения подстроки в строку, он продолжить искать такие же подстроки в строке до ее
окончания, а не выходил после первого нахождения.
public int substring(String file, String value) {
int fileLength = file.length();
int valueLength = value.length();
if (valueLength > fileLength) {
return -1;
}
HashMap cascade = 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()); }
Комментариев нет:
Отправить комментарий