给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
/**
* 得到最大不重复子串的长度
* @param str
* @return
*/
public static int getNoRepeatStrLength(String str){
//将字符串转化为字符数组
char[] chars = str.toCharArray();
//保存长度的集合
ArrayList<Integer> lengths = new ArrayList<>();
for (int i = 0; i < chars.length; i++) {
//从第一位开始判断长度
int length = 1;
//保存前面字符串的集合
HashSet<Character> characters = new HashSet<>();
for (int j = i+1; j <chars.length ; j++) {
characters.add(chars[j-1]);
//如果存在重复的就返回长度
if (characters.contains(chars[j])){
break;
}else {
length++;
}
}
lengths.add(length);
}
//从小到大排序
Collections.sort(lengths);
//获取最长字串
return lengths.get(lengths.size()-1);
}
本人解决思路如上