LeetCode Hot 100 滑动窗口 【Java和Golang解法】
1.无重复字符的最长子串
3.无重复字符的最长子串
Java解法
class Solution {public int lengthOfLongestSubstring(String s) {if (s.length() <= 1) {return s.length();}Map<Character, Integer> record = new HashMap<>();int left = 0;int maxLength = 0;for (int right = 0; right < s.length(); right++) {Character c = s.charAt(right);if (record.containsKey(c) && record.get(c) >= left) {left = record.get(c) + 1;}record.put(c, right);maxLength = Math.max(maxLength, right - left + 1);}return maxLength;}
}
Golang解法
func lengthOfLongestSubstring(s string) int {if len(s) <= 1 {return len(s)}record := make(map[rune]int)left := 0maxLength := 0for right, v := range s {if index, ok := record[v]; ok{if index >= left {left = index + 1}}record[v] = rightif maxLength < (right - left + 1) {maxLength = right - left + 1}}return maxLength
}
2.找到字符串中所有字母异位词
438.找到字符串中所有字母异位词
Java解法
class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> result = new ArrayList<>();if (p.length() > s.length()) {return result;}char[] pCharsArray = p.toCharArray();Arrays.sort(pCharsArray);String pSorted = new String(pCharsArray);for (int i = 0; i <= s.length() - p.length(); i++) {String s1 = s.substring(i, i + p.length());char[] s1CharsArray = s1.toCharArray();Arrays.sort(s1CharsArray);if (pSorted.equals(new String(s1CharsArray))) {result.add(i);}}return result;}
}
Golang解法(leetcode提示超时)
func findAnagrams(s string, p string) []int {var result []intif len(p) > len(s) {return result}pCharSlice := []rune(p)sort.Slice(pCharSlice, func(i, j int) bool {return pCharSlice[i] < pCharSlice[j]})pSorted := string(pCharSlice)for i := 0; i <= len(s) -len(p); i++ {subString := s[i : i + len(p)]subCharSlice := []rune(subString)sort.Slice(subCharSlice, func(i, j int) bool {return subCharSlice[i] < subCharSlice[j]})if pSorted == string(subCharSlice) {result = append(result, i)}}return result
}