Skip to content

Commit ccaaf58

Browse files
committed
biweekly contest 112
update the solutions
1 parent d3c5570 commit ccaaf58

File tree

3 files changed

+64
-28
lines changed

3 files changed

+64
-28
lines changed

Java/src/com/longluo/contest/biweekly_contest_112/Problem1.java

+30
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,38 @@ public static boolean canBeEqual(String s1, String s2) {
5050
return true;
5151
}
5252

53+
public static boolean canBeEqual_bf(String s1, String s2) {
54+
boolean[] masks = new boolean[4];
55+
56+
for (int i = 0; i < 4; i++) {
57+
char ch = s1.charAt(i);
58+
59+
boolean flag = false;
60+
61+
for (int j = 0; j < 4; j += 2) {
62+
int loc = (i + j) % 4;
63+
64+
if (!masks[loc] && s2.charAt(loc) == ch) {
65+
flag = true;
66+
masks[loc] = true;
67+
break;
68+
}
69+
}
70+
71+
if (!flag) {
72+
return false;
73+
}
74+
}
75+
76+
return true;
77+
}
78+
5379
public static void main(String[] args) {
5480
System.out.println("true ?= " + canBeEqual("abcd", "cdab"));
5581
System.out.println("false ?= " + canBeEqual("abcd", "dacb"));
82+
83+
System.out.println("true ?= " + canBeEqual_bf("abcd", "abcd"));
84+
System.out.println("true ?= " + canBeEqual_bf("abcd", "cdab"));
85+
System.out.println("false ?= " + canBeEqual_bf("abcd", "dacb"));
5686
}
5787
}

Java/src/com/longluo/contest/biweekly_contest_112/Problem2.java

+14-14
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,26 @@ public static boolean checkStrings(String s1, String s2) {
1010
return true;
1111
}
1212

13-
int[] oddcnt1 = new int[26];
14-
int[] oddcnt2 = new int[26];
13+
int len = s1.length();
1514

16-
int[] evencnt1 = new int[26];
17-
int[] evencnt2 = new int[26];
15+
int[] odd1 = new int[26];
16+
int[] even1 = new int[26];
1817

19-
int n = s1.length();
18+
int[] odd2 = new int[26];
19+
int[] even2 = new int[26];
2020

21-
for (int i = 0; i < n; i += 2) {
22-
evencnt1[s1.charAt(i) - 'a']++;
23-
evencnt2[s2.charAt(i) - 'a']++;
24-
}
25-
26-
for (int i = 1; i < n; i += 2) {
27-
oddcnt1[s1.charAt(i) - 'a']++;
28-
oddcnt2[s2.charAt(i) - 'a']++;
21+
for (int i = 0; i < len; i++) {
22+
if (i % 2 == 0) {
23+
even1[s1.charAt(i) - 'a']++;
24+
even2[s2.charAt(i) - 'a']++;
25+
} else {
26+
odd1[s1.charAt(i) - 'a']++;
27+
odd2[s2.charAt(i) - 'a']++;
28+
}
2929
}
3030

3131
for (int i = 0; i < 26; i++) {
32-
if (oddcnt1[i] != oddcnt2[i] || evencnt1[i] != evencnt2[i]) {
32+
if (odd1[i] != odd2[i] || even1[i] != even2[i]) {
3333
return false;
3434
}
3535
}

Java/src/com/longluo/contest/biweekly_contest_112/Problem3.java

+20-14
Original file line numberDiff line numberDiff line change
@@ -10,43 +10,49 @@ public class Problem3 {
1010
public static long maxSum(List<Integer> nums, int m, int k) {
1111
int n = nums.size();
1212

13-
long max = 0;
13+
Map<Integer, Integer> countMap = new HashMap<>();
1414

1515
long sum = 0;
1616

17-
Map<Integer, Integer> map = new HashMap<>();
18-
1917
for (int i = 0; i < k; i++) {
20-
sum += nums.get(i);
21-
map.put(nums.get(i), map.getOrDefault(nums.get(i), 0) + 1);
18+
int value = nums.get(i);
19+
sum += value;
20+
countMap.put(value, countMap.getOrDefault(value, 0) + 1);
2221
}
2322

24-
if (map.size() >= m) {
25-
max = Math.max(max, sum);
23+
long ans = 0;
24+
25+
if (countMap.size() >= m) {
26+
ans = Math.max(ans, sum);
2627
}
2728

2829
int left = 0;
2930
int right = k;
3031

3132
while (left < right && right < n) {
32-
map.put(nums.get(right), map.getOrDefault(nums.get(right), 0) + 1);
33+
int rVal = nums.get(right);
34+
35+
countMap.put(rVal, countMap.getOrDefault(rVal, 0) + 1);
3336
sum += nums.get(right);
34-
if (map.get(nums.get(left)) > 1) {
35-
map.put(nums.get(left), map.getOrDefault(nums.get(left), 0) - 1);
37+
38+
int lVal = nums.get(left);
39+
40+
if (countMap.get(lVal) > 1) {
41+
countMap.put(lVal, countMap.getOrDefault(lVal, 0) - 1);
3642
} else {
37-
map.remove(nums.get(left));
43+
countMap.remove(lVal);
3844
}
3945
sum -= nums.get(left);
4046

41-
if (map.size() >= m) {
42-
max = Math.max(max, sum);
47+
if (countMap.size() >= m) {
48+
ans = Math.max(ans, sum);
4349
}
4450

4551
left++;
4652
right++;
4753
}
4854

49-
return max;
55+
return ans;
5056
}
5157

5258
public static void main(String[] args) {

0 commit comments

Comments
 (0)