2023-连接后等于目标字符串的字符串对

Raphael Liu Lv10

给你一个 数字 字符串数组 nums 和一个 数字 字符串 target ,请你返回 nums[i] + nums[j]
(两个字符串连接)结果等于 target 的下标 (i, j) (需满足 i != j)的数目。

示例 1:

**输入:** nums = ["777","7","77","77"], target = "7777"
**输出:** 4
**解释:** 符合要求的下标对包括:
- (0, 1):"777" + "7"
- (1, 0):"7" + "777"
- (2, 3):"77" + "77"
- (3, 2):"77" + "77"

示例 2:

**输入:** nums = ["123","4","12","34"], target = "1234"
**输出:** 2
**解释:** 符合要求的下标对包括
- (0, 1):"123" + "4"
- (2, 3):"12" + "34"

示例 3:

**输入:** nums = ["1","1","1"], target = "11"
**输出:** 6
**解释:** 符合要求的下标对包括
- (0, 1):"1" + "1"
- (1, 0):"1" + "1"
- (0, 2):"1" + "1"
- (2, 0):"1" + "1"
- (1, 2):"1" + "1"
- (2, 1):"1" + "1"

提示:

  • 2 <= nums.length <= 100
  • 1 <= nums[i].length <= 100
  • 2 <= target.length <= 100
  • nums[i]target 只包含数字。
  • nums[i]target 不含有任何前导 0 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func numOfPairs(nums []string, target string) (ans int) {
cnt := map[string]int{}
for _, s := range nums {
cnt[s]++
}
for i, n := 1, len(target); i < n; i++ {
p, s := target[:i], target[i:] // 枚举所有前缀+后缀
if p != s {
ans += cnt[p] * cnt[s]
} else {
ans += cnt[p] * (cnt[p] - 1) // 前后缀相同时,相当于从 cnt[p] 个下标中选择两个不同下标的排列数,即 A(cnt[p], 2)
}
}
return
}
 Comments
On this page
2023-连接后等于目标字符串的字符串对