一、最大不重复子串问题
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
//思路:用双指针,滑动窗,遇到重复的,左指针就到重复的下标处,用max保存当前最大长度
class Solution {
public int lengthOfLongestSubstring(String s) {
int left=0;
int right=0;
int max=0;
char[] windows = new char[128];
for(right=0;right<s.length();right++){
char ch = s.charAt(right);
windows[ch]++;
//有重复字符,左指针移动到重复字符后
while(windows[ch]>1){//同一字符出现次数>1
char ch1 = s.charAt(left);
windows[ch1]--;//left指针右移,同时将left指针指向的字符清零
left++;
}
max = Math.max(max,right-left+1);
}
return max;
}
}
二、重复的子字符串
from——LeetCode459
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
class Solution {
public boolean repeatedSubstringPattern(String s) {
int len = s.length();
for(int i=1;i<len;i++){ //滑动窗大小
String ss = s.substring(0,i);
int count = 0;
for(int j=0;j<=len-i;j=j+i){
if(s.substring(j,j+i).equals(ss)){
count++;
}
}
if(count==len/i && len%i==0){
return true;
}
}
return false;
}
}