给你一个 数字 字符串数组 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、遍历;时间复杂度O(n^2),空间复杂度O(1)
func numOfPairs(nums []string, target string) int {
res := 0
n := len(nums)
for i := 0; i < n; i++ {
for j := i + 1; j < n; j++ {
if nums[i]+nums[j] == target {
res++
}
if nums[j]+nums[i] == target {
res++
}
}
}
return res
}
2、哈希辅助;时间复杂度O(n),空间复杂度O(n)
func numOfPairs(nums []string, target string) int {
res := 0
n := len(nums)
m := make(map[string]int)
for i := 0; i < n; i++ {
m[nums[i]]++
}
for i := 1; i < len(target); i++ {
a, b := target[:i], target[i:]
if a == b {
res = res + m[a]*(m[a]-1)
} else {
res = res + m[a]*m[b]
}
}
return res
}
Medium题目,数据范围较小,直接暴力即可
页面更新:2024-03-14
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号