LeetCode Hot 100 滑动窗口 【Java和Golang解法】

发布于:2025-07-03 ⋅ 阅读:(16) ⋅ 点赞:(0)

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 := 0
	maxLength := 0
	for right, v := range s {
		if index, ok := record[v]; ok{
			if index >= left {
				left = index + 1
			}
		}
		record[v] = right
		if 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 []int
	if 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
}