列表

详情


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"

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int numOfPairs(vector<string>& nums, string target) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 3 MB, 提交时间: 2022-11-16 11:28:47

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
}

python3 解法, 执行用时: 68 ms, 内存消耗: 15.1 MB, 提交时间: 2022-11-16 11:26:14

class Solution:
    def numOfPairs(self, nums: List[str], target: str) -> int:
        n, ans = len(nums), 0
        for i in range(0, n):
            for j in range(0, n):
                if nums[i] + nums[j] == target and i != j:
                    ans += 1
        return ans

上一题