From 747055608c7ba36f3ef4f9ebcf09067cdf2389c4 Mon Sep 17 00:00:00 2001 From: Ted Date: Wed, 29 Apr 2026 22:38:57 -0400 Subject: [PATCH] add solutions --- linked-list-cycle/tedkimdev.go | 23 +++++++++++ minimum-window-substring/tedkimdev.go | 55 +++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 linked-list-cycle/tedkimdev.go create mode 100644 minimum-window-substring/tedkimdev.go diff --git a/linked-list-cycle/tedkimdev.go b/linked-list-cycle/tedkimdev.go new file mode 100644 index 0000000000..8ff4024ed7 --- /dev/null +++ b/linked-list-cycle/tedkimdev.go @@ -0,0 +1,23 @@ +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ + +// TC: O(n) +// SC: O(1) +func hasCycle(head *ListNode) bool { + slow := head + fast := head + for fast != nil && fast.Next != nil { + slow = slow.Next + fast = fast.Next.Next + if slow == fast { + return true + } + } + + return false +} diff --git a/minimum-window-substring/tedkimdev.go b/minimum-window-substring/tedkimdev.go new file mode 100644 index 0000000000..6cfa523d5a --- /dev/null +++ b/minimum-window-substring/tedkimdev.go @@ -0,0 +1,55 @@ +// TC: O(n * m) +// SC: O(n + m) + +func minWindow(s string, t string) string { + if len(t) > len(s) { + return "" + } + + countT := map[byte]int{} + for i := 0; i < len(t); i++ { + countT[t[i]]++ + } + + windowMap := map[byte]int{} + have, need := 0, len(countT) + + left := 0 + resLeft, resRight := -1, -1 + resLen := len(s) + 1 + + for right := 0; right < len(s); right++ { + c := s[right] + windowMap[c]++ + + // update have + if count, ok := countT[c]; ok { + if windowMap[c] == count { + have++ + } + } + + // window valid -> move left to find minimum + for have == need { + if right-left+1 < resLen { + resLen = right - left + 1 + resLeft, resRight = left, right + } + + // remove left char + lc := s[left] + if count, ok := countT[lc]; ok { + if windowMap[lc] == count { + have-- + } + } + windowMap[lc]-- + left++ + } + } + + if resLeft == -1 { + return "" + } + return s[resLeft : resRight+1] +}