3.26

  • 用哈希表记录两个相邻元素之和,如果哈希表中已经存在,则返回true,否则返回false
  • 时间复杂度O(n),空间复杂度O(n),n为nums数组长度
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public boolean findSubarrays(int[] nums) {
HashSet<Integer> set = new HashSet<>();
for (int i = 1; i < nums.length; i++) {
boolean add = set.add(nums[i] + nums[i - 1]);
// 添加失败,说明哈希表中已经存在,返回true
if (!add) {
return true;
}
}
return false;
}
}

3.27

  • 对于 s 中的每一个字符,与 t 中的每一个字符进行比较,如果不同,则分别向左和向右扩展,计算满足条件的子串个数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public int countSubstrings(String s, String t) {
int ans = 0;
int m = s.length(), n = t.length();
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (s.charAt(i) != t.charAt(j)) {
int l = 0, r = 0;
// 向左扩展
while (i - l > 0 && j - l > 0 && s.charAt(i - l - 1) == t.charAt(j - l - 1)) {
++l;
}
// 向右扩展
while (i + r + 1 < m && j + r + 1 < n && s.charAt(i + r + 1) == t.charAt(j + r + 1)) {
++r;
}
// 计算子串个数
ans += (l + 1) * (r + 1);
}
}
}
return ans;
}
}