无重复字符的最长子串
题目
思路
用LinkedList来实现滑动窗口,如果有重复的字符,就记录长度并不断移出窗口,直至无重复字符,最后返回maxLen
代码
public int lengthOfLongestSubstring(String s) {
int maxLen = 0;
char[] array = s.toCharArray();
LinkedList<Character> characterLinkedList = new LinkedList<>();
for(int i=0;i<array.length;i++){
if(characterLinkedList.contains(array[i])){
maxLen = Math.max(maxLen,characterLinkedList.size());
while(characterLinkedList.contains(array[i])){
characterLinkedList.removeFirst();
}
characterLinkedList.add(array[i]);
}else{
characterLinkedList.addLast(array[i]);
}
}
return Math.max(maxLen,characterLinkedList.size());
}
找到字符串中所有字母异位词
题目
438. 找到字符串中所有字母异位词 - 力扣(LeetCode)
思路
对目标字符串进行重组排序,然后遍历s字符串,以目标字符串长度来截取,通过排序判断是否是异位词
代码
public List<Integer> findAnagrams(String s, String p) {
char[] chars = s.toCharArray();
char[] pCharArray = p.toCharArray();
Arrays.sort(pCharArray);//排序
String tar = new String(pCharArray);
List<Integer> list = new ArrayList<>();
for(int i=0;i<chars.length;i++){
if(i+pCharArray.length> chars.length)//超过范围
break;
String str = s.substring(i,i+pCharArray.length);//截取对应长度的字符串
char[] charArray = str.toCharArray();
Arrays.sort(charArray);//排序
String sTwo = new String(charArray);
if(sTwo.equals(tar)){
list.add(i);//是异位词
}
}
return list;
}