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

题目

给你一个 数字 字符串数组 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)

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

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

标签:字符串   前导   下标   复杂度   遍历   数组   示例   数目   暴力   题目   思路   提示   目标   数字   时间   科技   空间

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top