Skip to content

Commit 9791481

Browse files
authored
Merge pull request #1894 from njngwn/main
[njngwn] WEEK 08 solutions
2 parents 2a28adf + a1e93a8 commit 9791481

File tree

3 files changed

+124
-0
lines changed

3 files changed

+124
-0
lines changed

clone-graph/njngwn.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
// Definition for a Node.
3+
class Node {
4+
public int val;
5+
public List<Node> neighbors;
6+
public Node() {
7+
val = 0;
8+
neighbors = new ArrayList<Node>();
9+
}
10+
public Node(int _val) {
11+
val = _val;
12+
neighbors = new ArrayList<Node>();
13+
}
14+
public Node(int _val, ArrayList<Node> _neighbors) {
15+
val = _val;
16+
neighbors = _neighbors;
17+
}
18+
}
19+
*/
20+
21+
class Solution {
22+
HashMap<Node, Node> nodeMap = new HashMap<>(); // key: original Node, value: copied Node
23+
24+
public Node cloneGraph(Node node) {
25+
if (node == null) return null;
26+
27+
if (nodeMap.containsKey(node)) {
28+
return nodeMap.get(node);
29+
}
30+
31+
Node newNode = new Node(node.val);
32+
nodeMap.put(node, newNode);
33+
34+
for (Node neighborNode : node.neighbors) {
35+
newNode.neighbors.add(cloneGraph(neighborNode));
36+
}
37+
38+
return newNode;
39+
}
40+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Time Complexity: O(n), n: s.length()
2+
// Space Complexity: O(1)
3+
class Solution {
4+
public int characterReplacement(String s, int k) {
5+
int[] charFreqArr = new int[26]; // s consists of only uppercase English letters
6+
int maxFreq = 0;
7+
int maxLength = 0;
8+
9+
for (int left = 0, right = 0; right < s.length(); right++) {
10+
char letter = s.charAt(right);
11+
int letterIdx = letter-'A';
12+
13+
charFreqArr[letterIdx]++;
14+
maxFreq = Math.max(maxFreq, charFreqArr[letterIdx]);
15+
16+
// when left idx moves rightward? -> k + maxFreq < size of sliding window
17+
// here, we don't neet to recalculate maxFreq because the point is to calculate 'best' maxFreq
18+
if (maxFreq + k < right-left+1) {
19+
char leftChar = s.charAt(left);
20+
charFreqArr[leftChar-'A']--;
21+
left++;
22+
}
23+
24+
maxLength = Math.max(maxLength, right-left+1);
25+
}
26+
27+
return maxLength;
28+
}
29+
}
30+
31+
// AABABBA, k=1, maxFreq=1, maxLength=1
32+
// l
33+
// r
34+
35+
// AABABBA, k=1, maxFreq=2, maxLength=2
36+
// lr
37+
38+
// AABABBA, k=1, maxFreq=2, maxLength=3
39+
// l r
40+
41+
// AABABBA, k=1, maxFreq=3, maxLength=4
42+
// l r
43+
44+
// AABABBA, k=1, maxFreq=3, maxLength=4 ==> fail
45+
// l r
46+
47+
// AABABBA, k=1, maxFreq=3
48+
// l r

palindromic-substrings/njngwn.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Time Complexity: O(n*n), n: s.length()
2+
// Space Complexity: O(1)
3+
class Solution {
4+
public int countSubstrings(String s) {
5+
int cnt = 0;
6+
7+
for (int i = 0; i < s.length(); i++, cnt++) { // i: center of palindrom
8+
// odd number palindrom: e.g. aba
9+
int left = i-1, right = i+1;
10+
11+
while (left >= 0 && right < s.length()) {
12+
if (s.charAt(left) != s.charAt(right)) {
13+
break;
14+
}
15+
cnt++;
16+
left--;
17+
right++;
18+
}
19+
20+
// even number palindrom: e.g. abba
21+
left = i;
22+
right = i+1;
23+
24+
while (left >= 0 && right < s.length()) {
25+
if (s.charAt(left) != s.charAt(right)) {
26+
break;
27+
}
28+
cnt++;
29+
left--;
30+
right++;
31+
}
32+
}
33+
34+
return cnt;
35+
}
36+
}

0 commit comments

Comments
 (0)