2023. 连接后等于目标字符串的字符串对
题目描述
给你一个 数字 字符串数组 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 。
解法
方法一:枚举
遍历数组 nums
,对于每个 $i$,枚举所有 $j$,如果 $i \neq j$ 且 $nums[i] + nums[j] = target$,则答案加一。
时间复杂度 $O(n^2 \times m)$,其中 $n$ 和 $m$ 分别为数组 nums
和字符串 target
的长度。空间复杂度 $O(1)$。
1 2 3 4 5 6 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 |
|
方法二:哈希表
我们可以用哈希表统计数组 nums
中每个字符串出现的次数,然后遍历字符串 target
的所有前缀和后缀,如果前缀和后缀都在哈希表中,则答案加上它们出现的次数的乘积。
时间复杂度 $O(n + m^2)$,空间复杂度 $O(n)$。其中 $n$ 和 $m$ 分别为数组 nums
和字符串 target
的长度。
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|