2023. 连接后等于目标字符串的字符串对

【算法题】统计字符串数组中拼接等于目标字符串的下标对数量

题目描述

给你一个数字字符串数组 nums 和一个数字字符串 target,请你返回满足条件的下标对 (i, j) 的数量,条件是:

  • i != j
  • 拼接字符串 nums[i] + nums[j] 等于 target

也就是说,我们需要找出所有两个不同下标对应的字符串拼接后,刚好等于目标字符串 target 的情况。

示例 1:

输入:nums = ["777","7","77","77"], target = "7777"
输出:4

解释:
符合要求的下标对有:
- (0, 1):"777" + "7" = "7777"
- (1, 0):"7" + "777" = "7777"
- (2, 3):"77" + "77" = "7777"
- (3, 2):"77" + "77" = "7777"

示例 2:

输入:nums = ["123","4","12","34"], target = "1234"
输出:2

解释:
符合要求的下标对有:
- (0, 1):"123" + "4" = "1234"
- (2, 3):"12" + "34" = "1234"

示例 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 都只包含数字
  • 且没有任何字符串有前导零

解题分析

题目本质是让我们统计满足条件的字符串拼接对 (i, j) 的数量:

  • 遍历数组中所有不同的下标对 (i, j),确保 i != j
  • 判断 nums[i] + nums[j] 是否等于 target
  • 如果相等,则计数加一。

考虑到题目中 nums 长度最多 100,字符串长度最多 100,暴力双重循环的时间复杂度 O(n^2) 是完全可以接受的。


解题方法

方法一:暴力双重循环

  1. 使用两层循环遍历所有的 (i, j) 组合,排除 i == j 的情况。
  2. 拼接 nums[i] + nums[j]
  3. 判断是否等于 target,如果是,计数器 count 增加 1。
  4. 循环结束后返回 count

这是一种最简单直接的解法,代码简单且容易理解。


代码实现(Python)

from typing import List

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

解法分析与比较

  • 时间复杂度O(n^2 * m),其中 nnums 长度,m 是字符串拼接比较的长度(最多是 target 的长度)。由于题目限制,n 最多 100,m 最多 100,暴力方法完全可行。
  • 空间复杂度O(1),只用了几个变量计数,没使用额外存储。

是否有更优方法?

  • 通过哈希表或字典提前存储字符串的频次,或者通过拆分 target,尝试查找 target 的前缀和后缀是否存在于 nums 中,可以实现优化。
  • 但由于本题规模较小,暴力方法更直观且易于实现。

示例说明

以示例 1 为例:

nums = ["777", "7", "77", "77"]
target = "7777"
  • 组合 (0,1):“777” + “7” = “7777”
  • 组合 (1,0):“7” + “777” = “7777”
  • 组合 (2,3):“77” + “77” = “7777”
  • 组合 (3,2):“77” + “77” = “7777”

共4个满足条件的对。


总结

  • 本题通过双重循环暴力枚举 (i, j),判断拼接是否等于 target,统计满足条件的对数。
  • 代码简单,效率在题目限制下足够。
  • 适合作为字符串拼接问题的入门练习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值