Skip to content

Commit be59112

Browse files
committed
Updated tags
1 parent 3246e52 commit be59112

File tree

8 files changed

+102
-106
lines changed

8 files changed

+102
-106
lines changed

src/main/java/g3501_3600/s3556_sum_of_largest_prime_substrings/Solution.java

Lines changed: 45 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,65 @@
11
package g3501_3600.s3556_sum_of_largest_prime_substrings;
22

3-
// #Medium #2025_05_25_Time_21_ms_(100.00%)_Space_42.82_MB_(100.00%)
3+
// #Medium #String #Hash_Table #Math #Sorting #Number_Theory
4+
// #2025_05_27_Time_7_ms_(99.93%)_Space_42.77_MB_(98.34%)
45

5-
import java.util.ArrayList;
6-
import java.util.Collections;
76
import java.util.HashSet;
8-
import java.util.List;
97
import java.util.Set;
108

119
public class Solution {
1210
public long sumOfLargestPrimes(String s) {
13-
Set<Long> primeSet = new HashSet<>();
11+
Set<Long> set = new HashSet<>();
1412
int n = s.length();
15-
for (int i = 0; i < n; ++i) {
16-
long temp = 0;
17-
for (int j = i; j < n; ++j) {
18-
temp = temp * 10 + (s.charAt(j) - '0');
19-
if (isPrime(temp)) {
20-
primeSet.add(temp);
13+
long first = -1;
14+
long second = -1;
15+
long third = -1;
16+
for (int i = 0; i < n; i++) {
17+
long num = 0;
18+
for (int j = i; j < n; j++) {
19+
num = num * 10 + (s.charAt(j) - '0');
20+
if (i != j && s.charAt(i) == '0') {
21+
break;
22+
}
23+
if (isPrime(num) && !set.contains(num)) {
24+
set.add(num);
25+
if (num > first) {
26+
third = second;
27+
second = first;
28+
first = num;
29+
} else if (num > second) {
30+
third = second;
31+
second = num;
32+
} else if (num > third) {
33+
third = num;
34+
}
2135
}
2236
}
2337
}
24-
List<Long> primes = new ArrayList<>(primeSet);
25-
Collections.sort(primes);
26-
int m = primes.size();
27-
if (m < 3) {
28-
long sum = 0;
29-
for (long p : primes) {
30-
sum += p;
31-
}
32-
return sum;
38+
long sum = 0;
39+
if (first != -1) {
40+
sum += first;
41+
}
42+
if (second != -1) {
43+
sum += second;
44+
}
45+
if (third != -1) {
46+
sum += third;
3347
}
34-
return primes.get(m - 1) + primes.get(m - 2) + primes.get(m - 3);
48+
return sum;
3549
}
3650

37-
private boolean isPrime(long n) {
38-
if (n < 2) {
51+
public boolean isPrime(long num) {
52+
if (num <= 1) {
53+
return false;
54+
}
55+
if (num == 2 || num == 3) {
56+
return true;
57+
}
58+
if (num % 2 == 0 || num % 3 == 0) {
3959
return false;
4060
}
41-
for (long i = 2; i * i <= n; ++i) {
42-
if (n % i == 0) {
61+
for (long i = 5; i * i <= num; i += 6) {
62+
if (num % i == 0 || num % (i + 2) == 0) {
4363
return false;
4464
}
4565
}
Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,24 @@
11
package g3501_3600.s3557_find_maximum_number_of_non_intersecting_substrings;
22

3-
// #Medium #2025_05_25_Time_103_ms_(100.00%)_Space_54.87_MB_(100.00%)
3+
// #Medium #String #Hash_Table #Dynamic_Programming #Greedy
4+
// #2025_05_27_Time_15_ms_(84.54%)_Space_45.82_MB_(91.39%)
45

5-
import java.util.Deque;
6-
import java.util.LinkedList;
6+
import java.util.Arrays;
77

8-
@SuppressWarnings("unchecked")
98
public class Solution {
109
public int maxSubstrings(String s) {
11-
Deque<Integer>[] last = new LinkedList[26];
12-
for (int k = 0; k < 26; k++) {
13-
last[k] = new LinkedList<>();
14-
}
15-
int n = s.length();
16-
int[] dp = new int[n + 1];
17-
for (int i = 0; i < n; i++) {
18-
int c = s.charAt(i) - 'a';
19-
dp[i + 1] = dp[i];
20-
for (int j : last[c]) {
21-
if (i - j + 1 >= 4) {
22-
dp[i + 1] = Math.max(dp[i + 1], dp[j] + 1);
23-
}
24-
}
25-
last[c].addLast(i);
26-
if (last[c].size() > 4) {
27-
last[c].removeFirst();
10+
int[] prev = new int[26];
11+
int r = 0;
12+
Arrays.fill(prev, -1);
13+
for (int i = 0; i < s.length(); ++i) {
14+
int j = s.charAt(i) - 'a';
15+
if (prev[j] != -1 && i - prev[j] + 1 >= 4) {
16+
++r;
17+
Arrays.fill(prev, -1);
18+
} else if (prev[j] == -1) {
19+
prev[j] = i;
2820
}
2921
}
30-
return dp[n];
22+
return r;
3123
}
3224
}
Lines changed: 36 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,50 @@
11
package g3501_3600.s3558_number_of_ways_to_assign_edge_weights_i;
22

3-
// #Medium #2025_05_25_Time_118_ms_(100.00%)_Space_122.30_MB_(100.00%)
4-
5-
import java.util.ArrayList;
6-
import java.util.Arrays;
7-
import java.util.LinkedList;
8-
import java.util.List;
9-
import java.util.Queue;
3+
// #Medium #Math #Tree #Depth_First_Search #2025_05_27_Time_12_ms_(100.00%)_Space_106.62_MB_(76.01%)
104

115
public class Solution {
12-
private static final int MOD = (int) 1e9 + 7;
6+
private static int mod = (int) 1e9 + 7;
7+
private static long[] pow2 = new long[100001];
138

149
public int assignEdgeWeights(int[][] edges) {
15-
int n = edges.length + 1;
16-
List<List<Integer>> adj = new ArrayList<>();
17-
for (int i = 0; i <= n; i++) {
18-
adj.add(new ArrayList<>());
19-
}
20-
for (int[] i : edges) {
21-
adj.get(i[0]).add(i[1]);
22-
adj.get(i[1]).add(i[0]);
23-
}
24-
int[] l = new int[n + 1];
25-
int max = 0;
26-
Arrays.fill(l, -1);
27-
Queue<int[]> q = new LinkedList<>();
28-
q.offer(new int[] {1, 0});
29-
l[1] = 0;
30-
while (!q.isEmpty()) {
31-
int curr = q.peek()[0];
32-
int level = q.peek()[1];
33-
if (l[max] < l[curr]) {
34-
max = curr;
35-
}
36-
q.remove();
37-
for (int next : adj.get(curr)) {
38-
if (l[next] != -1) {
39-
continue;
40-
}
41-
q.offer(new int[] {next, level + 1});
42-
l[next] = level + 1;
10+
if (pow2[0] == 0) {
11+
pow2[0] = 1;
12+
for (int i = 1; i < pow2.length; i++) {
13+
pow2[i] = (pow2[i - 1] << 1) % mod;
4314
}
4415
}
45-
int[][] dp = new int[l[max]][2];
46-
for (int[] i : dp) {
47-
Arrays.fill(i, -1);
16+
int n = edges.length + 1;
17+
int[] adj = new int[n + 1];
18+
int[] degrees = new int[n + 1];
19+
for (int[] edge : edges) {
20+
int u = edge[0];
21+
int v = edge[1];
22+
adj[u] += v;
23+
adj[v] += u;
24+
degrees[u]++;
25+
degrees[v]++;
4826
}
49-
return solve(0, 0, dp);
50-
}
51-
52-
private int solve(int ind, int odd, int[][] dp) {
53-
if (ind == dp.length) {
54-
if (odd == 1) {
55-
return 1;
56-
} else {
57-
return 0;
27+
int[] que = new int[n];
28+
int write = 0;
29+
int read = 0;
30+
for (int i = 2; i <= n; ++i) {
31+
if (degrees[i] == 1) {
32+
que[write++] = i;
5833
}
5934
}
60-
if (dp[ind][odd] != -1) {
61-
return dp[ind][odd];
35+
int distance = 0;
36+
while (read < write) {
37+
distance++;
38+
int size = write - read;
39+
while (size-- > 0) {
40+
int v = que[read++];
41+
int u = adj[v];
42+
adj[u] -= v;
43+
if (--degrees[u] == 1 && u != 1) {
44+
que[write++] = u;
45+
}
46+
}
6247
}
63-
dp[ind][odd] =
64-
(solve(ind + 1, odd, dp) % MOD + solve(ind + 1, (odd + 1) % 2, dp) % MOD) % MOD;
65-
return dp[ind][odd];
48+
return (int) pow2[distance - 1];
6649
}
6750
}

src/main/java/g3501_3600/s3559_number_of_ways_to_assign_edge_weights_ii/Solution.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package g3501_3600.s3559_number_of_ways_to_assign_edge_weights_ii;
22

3-
// #Hard #2025_05_25_Time_135_ms_(100.00%)_Space_119.27_MB_(100.00%)
3+
// #Hard #Array #Dynamic_Programming #Math #Tree #Depth_First_Search
4+
// #2025_05_27_Time_138_ms_(64.66%)_Space_133.20_MB_(11.56%)
45

56
import java.util.ArrayList;
67
import java.util.List;

src/main/java/g3501_3600/s3560_find_minimum_log_transportation_cost/Solution.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package g3501_3600.s3560_find_minimum_log_transportation_cost;
22

3-
// #Easy #2025_05_25_Time_0_ms_(100.00%)_Space_41.10_MB_(56.75%)
3+
// #Easy #Math #2025_05_27_Time_0_ms_(100.00%)_Space_41.50_MB_(10.07%)
44

55
public class Solution {
66
public long minCuttingCost(int n, int m, int k) {

src/main/java/g3501_3600/s3561_resulting_string_after_adjacent_removals/Solution.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package g3501_3600.s3561_resulting_string_after_adjacent_removals;
22

3-
// #Medium #2025_05_25_Time_36_ms_(100.00%)_Space_46.14_MB_(64.60%)
3+
// #Medium #String #Stack #Simulation #2025_05_27_Time_36_ms_(100.00%)_Space_46.01_MB_(75.40%)
44

55
public class Solution {
66
public String resultingString(String s) {

src/main/java/g3501_3600/s3562_maximum_profit_from_trading_stocks_with_discounts/Solution.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package g3501_3600.s3562_maximum_profit_from_trading_stocks_with_discounts;
22

3-
// #Hard #2025_05_25_Time_27_ms_(100.00%)_Space_44.97_MB_(95.42%)
3+
// #Hard #Array #Dynamic_Programming #Tree #Depth_First_Search
4+
// #2025_05_27_Time_27_ms_(100.00%)_Space_45.29_MB_(82.12%)
45

56
import java.util.ArrayList;
67
import java.util.List;

src/main/java/g3501_3600/s3563_lexicographically_smallest_string_after_adjacent_removals/Solution.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package g3501_3600.s3563_lexicographically_smallest_string_after_adjacent_removals;
22

3-
// #Hard #2025_05_25_Time_146_ms_(98.77%)_Space_45.52_MB_(90.12%)
3+
// #Hard #String #Dynamic_Programming #2025_05_27_Time_121_ms_(99.09%)_Space_45.25_MB_(100.00%)
44

55
public class Solution {
6-
76
private boolean checkPair(char char1, char char2) {
87
int diffVal = Math.abs(char1 - char2);
98
return diffVal == 1 || (char1 == 'a' && char2 == 'z') || (char1 == 'z' && char2 == 'a');

0 commit comments

Comments
 (0)