Longest Substring Without Repeating Characters
刷题的第三天~~ 今天的题目是要求我从一个String中返回不重复的,最长的substring的长度,例如"pwwkew"中最长的不重复substring是"kew"长度为3。
这题思路我的思路比较直接,设置一个代表左边字符的数字left,一个代表遍历String的数字right,以及我们最终要返回的最长不重复substring长度max。我使用了character Set作为储存我substring的容器,让right遍历string,如果set中不包含string中在right位置的字符,则可以将这个字符加入到我的set中。在此过程中不断取max和set的最大值,存入max。一旦遍历过程中的字符重复了,则将set中代表该字符,在left位置的character remove掉。 遍历完成后即可return max作为答案。
class Solution {
public int lengthOfLongestSubstring(String s) {
//定义character set
HashSet<Character> set = new HashSet<>();
//代表set左边字符位置的left
int left = 0;
//代表遍历string,代表即将加入set的字符位置
int right = 0;
//最长的不重复substring的长度
int max = 0;
//当遍历string的过程中
while (right < s.length()){
// 如果set中不包含string在right位置的字符
if(!set.contains(s.charAt(right))){
// 则将该字符加入set
set.add(s.charAt(right));
// 移动到下一个字符位置
right++;
// 取当前max和set的size的最大值放入max作为当前答案
max = Math.max(max,set.size());
} else {
// 否则代表set中已经存在该字符,重复
// 将set中重复的字符删去
set.remove(s.charAt(left));
// 移到下一个可能删除的字符
left++;
}
}
// 返回答案
return max;
}
}
今天的题目感觉相对昨天的listnode简单许多,主要考我是否想到使用set来存储。但好像使用int array也是可以的。感觉Java写这种还是稍微麻烦一些,下次试试用脚本语言写。
本文介绍了一种求解字符串中最长无重复子串长度的算法实现,通过使用HashSet存储子串字符,确保子串内字符唯一性。利用左右指针进行遍历,实现了高效的求解。
104

被折叠的 条评论
为什么被折叠?



