Description
Given an array of digit strings nums and a digit string target, return the number of pairs of indices (i, j) (where i != j) such that the concatenation of nums[i] + nums[j] equals target.
Example 1:
Input: nums = ["777","7","77","77"], target = "7777" Output: 4 Explanation: Valid pairs are: - (0, 1): "777" + "7" - (1, 0): "7" + "777" - (2, 3): "77" + "77" - (3, 2): "77" + "77"
Example 2:
Input: nums = ["123","4","12","34"], target = "1234" Output: 2 Explanation: Valid pairs are: - (0, 1): "123" + "4" - (2, 3): "12" + "34"
Example 3:
Input: nums = ["1","1","1"], target = "11" Output: 6 Explanation: Valid pairs are: - (0, 1): "1" + "1" - (1, 0): "1" + "1" - (0, 2): "1" + "1" - (2, 0): "1" + "1" - (1, 2): "1" + "1" - (2, 1): "1" + "1"
Constraints:
2 <= nums.length <= 1001 <= nums[i].length <= 1002 <= target.length <= 100nums[i]andtargetconsist of digits.nums[i]andtargetdo not have leading zeros.
Solutions
Solution 1: Enumeration
Traverse the array nums, for each i, enumerate all j, if i ≠ j and nums[i] + nums[j] = target, then increment the answer by one.
The time complexity is O(n2 × m), where n and m are the lengths of the array nums and the string target, respectively. The space complexity is O(1).
class Solution: def numOfPairs(self, nums: List[str], target: str) -> int: n = len(nums) return sum( i != j and nums[i] + nums[j] == target for i in range(n) for j in range(n) )(code-box)
Solution 2: Hash Table
We can use a hash table to count the occurrence of each string in the array nums, then traverse all prefixes and suffixes of the string target. If both the prefix and suffix are in the hash table, then increment the answer by the product of their occurrences.
The time complexity is O(n + m2), and the space complexity is O(n). Here, n and m are the lengths of the array nums and the string target, respectively.
class Solution: def numOfPairs(self, nums: List[str], target: str) -> int: cnt = Counter(nums) ans = 0 for i in range(1, len(target)): a, b = target[:i], target[i:] if a != b: ans += cnt[a] * cnt[b] else: ans += cnt[a] * (cnt[a] - 1) return ans(code-box)
