📅  最后修改于: 2023-12-03 15:12:04.634000             🧑  作者: Mango
给定一个被包围的字符串S,例如“abc”被“bcd”的环绕字符串包围。我们需要找出所有唯一的子字符串(不包括重复的子字符串)。
valids
,表示当前位置是否是唯一子字符串的结尾。HashSet
,用于保存所有唯一的子字符串。start
和end
,表示唯一子字符串的起始位置和终止位置。valids
数组中相应位置标记为true
。valids
数组中相应位置标记为true
。public static Set<String> findUniqueSubstrings(String S) {
Set<String> result = new HashSet<>();
int len = S.length();
boolean[] valids = new boolean[len];
for (int end = 0; end < len; end++) {
if (valids[end]) {
result.add(S.substring(end, end + 1));
continue;
}
int start = end;
while (start > 0 && !valids[start - 1] && S.charAt(start - 1) != ((S.charAt(start) - 1) % 26 + 'a')) {
start--;
}
String sub = S.substring(start, end + 1);
if (!result.contains(sub)) {
result.add(sub);
valids[end] = true;
}
}
return result;
}