タイトルの説明:
文字列を指定して、繰り返し文字を含まない最長の部分文字列の長さを調べてください。
例1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
例2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
例3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
ソース:LeetCode
リンク:https ://leetcode-cn.com/problems/longest-substring-without-repeating-characters 。
同様のトピック
アイデア
典型的双指针加滑动窗口,设left为滑动窗口的左边界,
right为右边界;
1.用一个数组记录每个字符出现的个数
2.当某一个字符出现的个数大于1的时候,滑动窗口开始缩小,
l++,并减掉左端点的字符出现的个数,直到没有重复
コード ::
class Solution {
public int lengthOfLongestSubstring(String s) {
int length=s.length();
char arr[]=s.toCharArray();
int l=0;
int r=0;
int max=0;
int now[]=new int[128];
while(r<length){
char temp=arr[r];
now[temp]++;
r++;
while(now[temp]>1){
char temp2=arr[l];
now[temp2]--;
l++;
}
max=Math.max(max,r-l);
}
return max;
}
}