class Solution {
public:
int numOfPairs(vector<string>& nums, string target) {
}
};
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 。原站题解
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