Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情。
一、题目描述:
给定一个字符串
s,请你找出其中不含有重复字符的 最长子串 的长度。
二、思路分析:
-
首先子串怎么查找:从父串任意位置往后截取任意长度的串。
-
怎么分析是不含有重复字符:从父串任意位置开始,逐个字符往后截取任意长度的串,当前字符不在已截取的串里面,则继续往后截,直到出现重复字符。
-
找出所有不重复的子串,返回其中长度最大的子串长度。
-
从上面逻辑知道了怎么查找不重复的子串,可以采用两个循环,把所有的不重复的子串都枚举出来,取里面长度最长的一个子串。该子串的长度就是要返回的结果。
三、通过代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
// 空判断
if (s == null) {
return 0;
}
// 空白字符判断
if (s.length() == 1) {
return 1;
}
int maxLength = 0;
String maxSubStr = null;
// 冒泡循环判断
for (int i = 0; i < s.length() - 1; i++) {
String subStr = "" + s.charAt(i);
for (int j = i + 1; j < s.length(); j++) {
if (!subStr.contains("" + s.charAt(j))) {
subStr += s.charAt(j);
} else {
break;
}
}
maxSubStr = subStr.length() > maxLength ? subStr : maxSubStr;
maxLength = subStr.length() > maxLength ? subStr.length() : maxLength;
}
return maxLength;
}
}
四、总结:
-
注意下空值和空白串的处理。
-
这是采用的两个循环冒泡的方式实现的,时间复杂度略高,大家有好的方法,欢迎交流~