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 。

解题思路

  1. 使用map记录每个字符串出现的下标,因为可能存在相同的字符串出现在不同下标,因此下标使用vector进行维护
  2. 遍历所有字符串,假设其组成的是target的前部分,使用map快速判断是否存在其他下标的字符串可以组成target的后部分

例如对于第一个样例:

nums = ["777","7","77","77"], target = "7777"
  1. 对于nums[0]=“777”,map中存在“7”可以与其构成“7777”,并且下标与其不相等
  2. 对于nums[1]=“7”,map中存在“777”可以与其构成“7777”,并且下标与其不相等
  3. 对于nums[2]=“77”,map中存在“77”可以与其构成“77”,只存在一个下标与其不相等,所以答案只能加一
  4. 对于nums[3]=“777”,map中存在“77”可以与其构成“77”,只存在一个下标与其不相等,所以答案只能加一

代码

class Solution {public:int numOfPairs(vector<string>& nums, string target) {map<string,vector<int>> m;for (int i = 0; i < nums.size(); ++i) {m[nums[i]].push_back(i);}int res(0);for (int i = 0; i < nums.size(); ++i) {if (target.size()<nums[i].size())continue;string front= target.substr(0,nums[i].size());string back=target.substr(nums[i].size(),target.size()-nums[i].size());if (nums[i]==front&&m.count(back)){for(auto t:m[back])if (t!=i)res++;}}return res;}
};

2023. 连接后等于目标字符串的字符串对相关推荐

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

    文章目录 1. 题目 2. 解题 1. 题目 给你一个 数字 字符串数组 nums 和一个 数字 字符串 target ,请你返回 nums[i] + nums[j] (两个字符串连接)结果等于 ta ...

  2. 实验5.4 编程实现两字符串的连接(使用string类定义字符串对象)

    题目 使用string类定义字符串对象,实现两字符串的连接. AC的C++代码如下: #include<iostream> #include<string> using nam ...

  3. 字符串分隔 -连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。...

    •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组: •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100) 输 ...

  4. java连接字符串_Java字符串连接运算符

    Java字符串连接运算符 在java语言中所有的字符串都使用半角双引号括起来的,字符串属于引用数据类型,不属于基本数据类型的范畴,怎么定义一个字符串的变量呢?例如:String name = &quo ...

  5. mysql 函数多个连接_MySQL数据库中如何连接两个或多个字符串呢?

    摘要: 下文讲述MySQL数据库中组合字符串的方法分享,如下所示: 实现思路: 使用系统函数CONCAT即可实现两个或多个字符串的组合连接 注意事项: 当组合字符串中,任意一个字符为NULL时,则返回 ...

  6. java 字符串连接_为什么 Java 要把字符串设计成不可变的

    String是Java中一个不可变的类,所以它一旦被实例化就无法被修改.不可变类的实例一旦创建,其成员变量的值就不能被修改.不可变类有很多优势.本文总结了为什么字符串被设计成不可变的.将涉及到内存.同 ...

  7. 字符串加密后md5为 0exxxx 的字符串

    字符串加密后md5为 0exxxx 的字符串 (x 必须是 10 进制数字) 列表 字符串 MD5 QNKCDZO 0e830400451993494058024219903391 240610708 ...

  8. 输入一个以回车结束的字符串(少于80个字符),滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),输出该字符串并将其转换为十进制数后输出。

    [问题描述] 输入一个以回车结束的字符串(少于80个字符),滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),输出该字符串并将其转换为十进制数后输出. [输入形式]一个字符串,小于80个字 ...

  9. •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

    •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组: •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 1. 首先从第二条规定,可以看出,需要用到字符串的添加,我们考虑用S ...

最新文章

  1. ASP.NET实现身份模拟
  2. 自我总结(四) ---java web项目完结,j2ee的开始
  3. 带项目的一些体会以及合格的 Leader 应该具备什么特质?(转)
  4. C# 正则表达式类 Match类和Group类
  5. error while loading shared libraries: libatomic.so.1
  6. Apache2为什么会自动加载index.php
  7. MySQL查询不到中文的问题
  8. IDEA系列(四)一部署war 和 war exploded的区别
  9. [实践系列]Promises/A+规范
  10. MySQL使用裸设备
  11. selenium以及chromdrive安装
  12. JS实现new关键字的功能
  13. 下载全球高清卫星影像地图
  14. 怎样用ipad使用python_如何用iPad运行Python代码?
  15. 人工神经网络与遗传算法,神经网络和算法的关系
  16. 汽车诊断系统总线协议规范知识汇总
  17. Are These Birds?
  18. 南京市城乡地籍信息一体化管理的几点思考
  19. 区块链可以减少社会不平等吗?
  20. python语言是解释型语言-解释型语言python

热门文章

  1. 进程与线程的区别(面试题)
  2. WinPcap笔记(5):不用回调方法捕获数据包
  3. Android strings.xml中定义字符串显示空格
  4. ImageLoader加载图片
  5. Android API中被忽略的几个函数接口
  6. 怎么去掉Flex4生成的SWF加载时的进度条
  7. RSS你会用了吗?答曰:不会
  8. Linux 环境下搭建 Jenkins(Hudson)平台
  9. 在网上收集了一部分关于使用Google API进行手机定位的资料和大家分享
  10. Lecture 16 Minimum Spanning Trees