//给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
//
//
//
// 示例 1:
//
//
//输入: s = "abcabcbb"
//输出: 3
//解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
//
//
// 示例 2:
//
//
//输入: s = "bbbbb"
//输出: 1
//解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
//
//
// 示例 3:
//
//
//输入: s = "pwwkew"
//输出: 3
//解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
// 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
//
//
// 示例 4:
//
//
//输入: s = ""
//输出: 0
//
//
//
//
// 提示:
//
//
// 0 <= s.length <= 5 * 104
// s 由英文字母、数字、符号和空格组成
//
// Related Topics 哈希表 字符串 滑动窗口
// 👍 5656 👎 0
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int lengthOfLongestSubstring(String s) {
//假设x是最长子串,则下一个s[i],必然是i>len 或 s[i]在x中j位置
//x[0-j]记录下来
//x[j-i]为新的查找
String pre = "";
String cur = "";
int length = s.length();
for(int i = 0;i<length;i++){
if(cur.contains(String.valueOf(s.charAt(i)))){
int index = cur.indexOf(String.valueOf(s.charAt(i)));
if(pre.length() < cur.length()){
pre = cur;
}
if(pre.length() < cur.substring(0,index+1).length()){
pre = cur.substring(0,index+1);
}
cur = cur.substring(index+1) + s.charAt(i);
}else{
cur += String.valueOf(s.charAt(i));
}
}
return pre.length() > cur.length() ? pre.length() : cur.length();
}
}
//leetcode submit region end(Prohibit modification and deletion)
leetcode [3]无重复字符的最长子串
最新推荐文章于 2024-07-25 22:25:49 发布