欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > leetcode——无重复字符的最长字串(java)

leetcode——无重复字符的最长字串(java)

2025/2/24 21:57:38 来源:https://blog.csdn.net/W_L_MM/article/details/145258138  浏览:    关键词:leetcode——无重复字符的最长字串(java)

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

解题方法:(不定长滑动窗口)

1.经分析,很明显使用不定长滑动窗口来进行解题,并且涉及到字符串的切片,所以我们需要一个StringBuilder来充当滑窗。

2.还需要注意的是这时候先把字符串转化为字符数组比较好操作。

3.开始遍历字符数组,将滑窗中没有的字符添加进去,直到出现重复字符,不再添加,开始删除,使用切片删除,最后在添加元素进入滑窗。

4.记得最后也还要更新一下结果,因为最后一次滑窗很可能没有重复字符,没有进入到else中更新结果。

class Solution {public int lengthOfLongestSubstring(String s) {int ans = 0;StringBuilder tmp = new StringBuilder();char[] ns = s.toCharArray();int n = ns.length;for (int i = 0; i < n; i++) {if (tmp.indexOf(String.valueOf(ns[i])) == -1) {tmp.append(ns[i]);} else {int cur = tmp.length();ans = Math.max(cur, ans);tmp.delete(0, tmp.indexOf(String.valueOf(ns[i])) + 1);tmp.append(ns[i]);}}ans = Math.max(tmp.length(), ans);return ans;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词