diff --git a/longest-substring-without-repeating-characters/minji-go.java b/longest-substring-without-repeating-characters/minji-go.java
new file mode 100644
index 000000000..469b143c4
--- /dev/null
+++ b/longest-substring-without-repeating-characters/minji-go.java
@@ -0,0 +1,28 @@
+/**
+ * week07-2.longest-substring-without-repeating-characters
+ *
Description: find the length of the longest substring without duplicate characters
+ * Topics: Hash Table, String, Sliding Window
+ * Time Complexity: O(N), Runtime 5ms
+ * Space Complexity: O(L), Memory 44.66MB
+ */
+
+class Solution {
+ public int lengthOfLongestSubstring(String s) {
+ int max = 0;
+ int left = 0;
+
+ Map chars = new HashMap<>();
+ for (int right = 0; right < s.length(); right++) {
+ char c = s.charAt(right);
+
+ if (chars.containsKey(c) && chars.get(c) >= left) {
+ left = chars.get(c) + 1;
+ }
+
+ chars.put(c, right);
+ max = Math.max(max, right - left + 1);
+ }
+
+ return max;
+ }
+}
diff --git a/number-of-islands/minji-go.java b/number-of-islands/minji-go.java
new file mode 100644
index 000000000..1be792147
--- /dev/null
+++ b/number-of-islands/minji-go.java
@@ -0,0 +1,57 @@
+/**
+ * week07-3. number-of-islands
+ * Description: return the number of islands is surrounded by water("0")
+ * Topics: Array, Depth-First Search, Breadth-First Search, Union Find, Matrix
+ * Time Complexity: O(M×N), Runtime 5ms
+ * Space Complexity: O(M×N), Memory 52.11MB
+ */
+class Solution {
+ private char[][] grid;
+ private int m;
+ private int n;
+ private boolean[][] visit;
+ private int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
+
+ public int numIslands(char[][] grid) {
+ this.grid = grid;
+ this.m = grid.length;
+ this.n = grid[0].length;
+ this.visit = new boolean[m][n];
+
+ int num = 0;
+ for (int r = 0; r < m; r++) {
+ for (int c = 0; c < n; c++) {
+ if (grid[r][c] == '1' && !visit[r][c]) {
+ findIsland(r, c);
+ num++;
+ }
+ }
+ }
+ return num;
+ }
+
+ public void findIsland(int r, int c) {
+ Queue queue = new LinkedList<>();
+ visit[r][c] = true;
+ queue.offer(new int[]{r, c});
+
+ while (!queue.isEmpty()) {
+ int[] cur = queue.poll();
+ int cr = cur[0];
+ int cc = cur[1];
+
+ for (int[] dir : directions) {
+ int nr = cr + dir[0];
+ int nc = cc + dir[1];
+ if (nr < 0 || nr > m - 1 || nc < 0 || nc > n - 1) {
+ continue;
+ }
+ if (grid[nr][nc] == '1' && !visit[nr][nc]) {
+ visit[nr][nc] = true;
+ queue.offer(new int[]{nr, nc});
+ }
+ }
+ }
+ }
+
+}
diff --git a/reverse-linked-list/minji-go.java b/reverse-linked-list/minji-go.java
new file mode 100644
index 000000000..0a1ddc999
--- /dev/null
+++ b/reverse-linked-list/minji-go.java
@@ -0,0 +1,21 @@
+/**
+ * week07-1.reverse-linked-list
+ * Description: return the reversed list
+ * Topics: Linked List, Recursion
+ * Time Complexity: O(N), Runtime 0ms
+ * Space Complexity: O(1), Memory 43.04MB
+ */
+class Solution {
+ public ListNode reverseList(ListNode head) {
+ ListNode prev = null;
+ ListNode curr = head;
+ while (curr != null) {
+ ListNode temp = curr.next;
+ curr.next = prev;
+ prev = curr;
+ curr = temp;
+ }
+
+ return prev;
+ }
+}
diff --git a/unique-paths/minji-go.java b/unique-paths/minji-go.java
new file mode 100644
index 000000000..3d8b06893
--- /dev/null
+++ b/unique-paths/minji-go.java
@@ -0,0 +1,39 @@
+/**
+ * week07-4. unique-paths
+ * Description: return the number of possible unique paths to reach the bottom-right corner
+ * Topics: Math, Dynamic Programming, Combinatorics
+ * Time Complexity: O(M×N), Runtime 2ms
+ * Space Complexity: O(M×N), Memory 40.76MB
+ */
+class Solution {
+ public int uniquePaths(int m, int n) {
+ int[][] dirs = {{1, 0}, {0, 1}};
+ int[][] dp = new int[m][n];
+ dp[0][0] = 1;
+
+ Queue queue = new LinkedList<>();
+ queue.add(new int[]{0, 0});
+
+ while (!queue.isEmpty()) {
+ int[] cur = queue.poll();
+ int cr = cur[0];
+ int cc = cur[1];
+
+ for (int i = 0; i < 2; i++) {
+ int nr = cr + dirs[i][0];
+ int nc = cc + dirs[i][1];
+
+ if (nr > m - 1 || nc > n - 1) {
+ continue;
+ }
+
+ if (dp[nr][nc] == 0) {
+ queue.add(new int[]{nr, nc});
+ }
+ dp[nr][nc] += dp[cr][cc];
+ }
+ }
+
+ return dp[m - 1][n - 1];
+ }
+}