题目:
在一个字符串中寻找没有重复字母的最长子串:
- 如“abcabcbb”,则结果为“abc”
- 如“bbbbbbb”,则结果为“b”
- 如“pwwkew”,则结果为“wke”
方法一:
将字符串转换为字符数组,然后采用双索引技术/滑动窗口方法。
方法一代码:
package com.haobi;
public class LongestSubstringWithoutRepeatingCharacters {
public static void main(String[] args) {
// String s = "abcabcbb";
// String s = "bbbbbb";
String s = "pwwkew";
System.out.println(lengthOfLongestSubstring(s));
}
public static int lengthOfLongestSubstring(String s) {
int[] freq = new int[256];//所有字符频率都为0
int l = 0, r = -1;//滑动窗口为s[l...r]
int result = 0;//满足字串条件的长度
char[] ss = s.toCharArray();
while(l < ss.length) {
if(r+1 < ss.length && freq[ss[r+1]] == 0) {//右边界扩展
r++;
freq[ss[r]]++;//更新频率
}else {//左边界缩短
freq[ss[l]]--;
l++;
}
//获得新的滑动窗口(子串)
if(result < (r-l+1)) {
result = r-l+1;
}
}
return result;
}
}