代码:
public class Test {
public static void main(String[] args) {
System.out.println(getMaxStr("bbbdde"));
}
public static String getMaxStr(String s) {
// 最大长度
int max = 0;
// 开始下标
int start = 0;
// 最长子串
String maxStr = "";
// 字符集合
Map<Character, Integer> map = new HashMap<>(s.length() * 2);
// 遍历字符串
for (int i = 0; i < s.length(); i++) {
// 当前字符
char o = s.charAt(i);
// 判断是否包含
if (map.containsKey(o)) {
// 最长子串
if (i - start > max) {
maxStr = s.substring(start, i);
}
// 最大长度
max = Math.max(max, i - start);
// 刷新开始下表
start = Math.max(start, map.get(o) + 1);
}
// 保存字符最大下标
map.put(o, i);
}
// 最长子串
if (max < s.length() - start) {
maxStr = s.substring(start);
}
// 最终几个字符也不能放过
max = Math.max(max, s.length() - start);
// 返回最长子串
return maxStr;
}
}
结果:
bd
延伸: