题目要求:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
按题意,需要遍历一遍字符串才能够最终确定最长字串,可以考虑采用双指针;
又因为要求无重复,可以考虑使用集合框架HashSet判断字符之间是否重复。
代码如下:
class Solution {
public int lengthOfLongestSubstring(String s) {
if(s.length()==1){
return 1;
}
int max=0;
int temp=0;
int p=0,q=0;
HashSet<Character> set=new HashSet<>();
while(q<s.length()){
if(!set.contains(s.charAt(q))){
temp++;
set.add(s.charAt(q));
q++;
max=Math.max(temp,max);
}
else{
p++;
q=p;
temp=0;
set.clear();
}
}
return max;
}
}
原题地址:
Leecode 3.无重复字符的最长子串
版权声明:本文为weixin_45650420原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。