Поместите все символы из s2
в структуру данных постоянного поиска (например, HashSet
).Выполните итерацию по каждому символу в s1
и посмотрите, содержит ли ваша структура данных этот символ.
Грубо (не проверено):
public int indexOfFirstContainedCharacter(String s1, String s2) {
Set<Character> set = new HashSet<Character>();
for (int i=0; i<s2.length; i++) {
set.add(s2.charAt(i)); // Build a constant-time lookup table.
}
for (int i=0; i<s1.length; i++) {
if (set.contains(s1.charAt(i)) {
return i; // Found a character in s1 also in s2.
}
}
return -1; // No matches.
}
Этот алгоритм O(n)
в отличие от O(n^2)
в алгоритме, который вы описываете.