免费建立自己的网站,wordpress 返回首页,找人做网站网站,建设网站团队无重复字符的最长字串 .题目链接题目详情算法原理题目解析滑动窗口定义指针进窗口判断出窗口更新结果 我的答案 . 题目链接
无重复字符的最长字串
题目详情 算法原理
题目解析
首先,为了使字符串遍历的更加方便,我们选择将字符串转换为数组 题目要求子串中不能有重复的字符… 无重复字符的最长字串 .题目链接题目详情算法原理题目解析滑动窗口定义指针进窗口判断出窗口更新结果 我的答案 . 题目链接
无重复字符的最长字串
题目详情 算法原理
题目解析
首先,为了使字符串遍历的更加方便,我们选择将字符串转换为数组 题目要求子串中不能有重复的字符,因此,我们可以利用hash表来校验是否重复,这里我们采用数组来模拟hash表
滑动窗口
者道题我们使用的是滑动窗口的思想,大致逻辑如图
定义指针
因为窗口需要两个指针来维护窗口的边界,且两个指针都需要对数组进行从左往右的遍历操作,因此,我们定义left和right两个指针,初始值都为0
进窗口
这里的进窗口操作,可以理解为将hash表中的值进行1操作
判断
这里的判断,主要是校验刚刚进行hash表1操作之后的值,如果1,说明hash表中出现了重复的字符,即不满足条件,需要出窗口
出窗口
这里的出窗口操作,就是将hash表中的left值除去,并将left往后移动一位.
完成操作之后,继续进行判断,如果已经没有重复的字符,就进行进窗口操做,直到right到达数组边界
更新结果
这里需要注意,题目要求无重复字符的最长字串,因此需要记录一下,hash表中的数据处于合法状态的时候,最长字串的长度
我的答案
class Solution {public int lengthOfLongestSubstring(String ss) {//将字符串转换为数组char[] s ss.toCharArray();//利用数组模拟哈希表int [] hash new int [128];//定义指针int left 0,right 0,ns.length,ret 0;while(rightn){//进窗口(right加入hash表))hash[s[right]];//判断hash表中是否有与当前right重复的数while(hash[s[right]]1){//不满足条件,出窗口(left移除hash表),直到将与right重复的数被移除hash[s[left]]--;}//当前hash表合法,可以更新结果ret Math.max(ret,right-left1);//为下一次进窗口做准备right;}return ret;}
}