LeetCode 1181. 前后拼接(哈希map)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个「短语」列表 phrases,请你帮忙按规则生成拼接后的「新短语」列表。

「短语」(phrase)是仅由小写英文字母和空格组成的字符串。「短语」的开头和结尾都不会出现空格,「短语」中的空格不会连续出现。

「前后拼接」(Before and After puzzles)是合并两个「短语」形成「新短语」的方法。

我们规定拼接时,第一个短语的最后一个单词 和 第二个短语的第一个单词 必须相同

返回每两个「短语」 phrases[i] 和 phrases[j](i != j)进行「前后拼接」得到的「新短语」。

注意,两个「短语」拼接时的顺序也很重要,我们需要同时考虑这两个「短语」。另外,同一个「短语」可以多次参与拼接,但「新短语」不能再参与拼接。

请你按字典序排列并返回「新短语」列表,列表中的字符串应该是 不重复的

示例 1:
输入:phrases = ["writing code","code rocks"]
输出:["writing code rocks"]示例 2:
输入:phrases = ["mission statement","a quick bite to eat","a chip off the old block","chocolate bar","mission impossible","a man on a mission","block party","eat my words","bar of soap"]
输出:["a chip off the old block party","a man on a mission impossible","a man on a mission statement","a quick bite to eat my words","chocolate bar of soap"]示例 3:
输入:phrases = ["a","b","a"]
输出:["a"]提示:
1 <= phrases.length <= 100
1 <= phrases[i].length <= 100

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/before-and-after-puzzle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

class Solution {
public:vector<string> beforeAndAfterPuzzles(vector<string>& phrases) {unordered_map<string,vector<int>> front;//字符前缀,包含该字符的字符串的idxunordered_map<string,vector<int>> back;//字符后缀,包含该字符的字符串的idxsize_t idx1, idx2, len, i, j;for(i=0; i<phrases.size(); ++i){idx1 = phrases[i].find_first_of(' ');//第一个空格idx2 = phrases[i].find_last_of(' ');//最后一个空格if(idx1 != string::npos)//找到了front[phrases[i].substr(0,idx1)].push_back(i);else//没找到front[phrases[i]].push_back(i);if(idx2 != string::npos)back[phrases[i].substr(idx2+1)].push_back(i);elseback[phrases[i]].push_back(i);}set<string> ans;for(auto it1 = back.begin(); it1 != back.end(); ++it1){if(!front.count(it1->first))//前缀不包含该单词continue;len = it1->first.size();//包含,该代词的长度for(i = 0; i < it1->second.size(); i++){idx1 = it1->second[i];//包含该后缀的单词idxfor(j = 0; j < front[it1->first].size(); j++){idx2 = front[it1->first][j];//包含该前缀的单词idxif(idx1 == idx2)continue;//同一个单词ans.insert(phrases[idx1]+phrases[idx2].substr(len));}}}return vector<string>(ans.begin(), ans.end());}
};

12 ms 10.3 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中字符串注意事项

字符串输入和输出userName input(请输入用户名:)print("用户名为&#xff1a;%s"%userName)password input(请输入密码:)print("密码为&#xff1a;%s"%password)1.字符串在单引号和双引号之间2.字符串无法修改3.三引号适合创建多行字符串4.字符串可以进…

Android设置text按钮,安卓基础控件使用(TextView、Button、ImageView、EditText)

一、文本控件TextView1.布局文件android:text"string/content"android:layout_width"wrap_content"android:layout_height"wrap_content"android:textColor"color/green"android:textSize"dimen/title"android:lines"1…

前端开发规范文档

Web Front-end Development Document Specification(www.weyoo.cn) 1、文件管理规范 1) 资源文件目录 背景图片目录 图标目录 图片目录 临时图片目录 样式文件目录 脚本文件目录 flash文件目录 上传文件目录 静态文件目录 images/bg images/ico images/pic images/temp style j…

LeetCode 1135. 最低成本联通所有城市(最小生成树+排序+并查集)

文章目录1. 题目2. 解题1. Kruskal2. prim1. 题目 想象一下你是个城市基建规划者&#xff0c;地图上有 N 座城市&#xff0c;它们按以 1 到 N 的次序编号。 给你一些可连接的选项 conections&#xff0c;其中每个选项 conections[i] [city1, city2, cost] 表示将城市 city1 …

python中的下标索引

所谓“下标”&#xff0c;就是编号&#xff0c;就好比超市中的存储柜的编号&#xff0c;通过这个编号就能找到相应的存储空间。字符串实际上就是字符的数组,也支持下标索引.如果有字符串:name abcdef&#xff0c;在内存中的实际存储如下:如果想取出部分字符&#xff0c;那么可…

android 视频转字节,如何将视频文件(.mp4)格式转换为android中的二进制格式?...

我想在网络服务器上传视频。我得到了我想要以二进制格式传递文件的服务&#xff0c;我该怎么做&#xff1f;如何将视频文件(.mp4)格式转换为android中的二进制格式&#xff1f;我试图通过base64将视频文件转换为二进制格式..&#xff1f;public class binaryformat extends Act…

python中的切片以及注意事项

切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。字符串&#xff1a;[起始:结束:步长] 注意&#xff1a;选取的区间属于左闭右开型&#xff0c;即从"起始"位开始&#xff0c;到"结束"位的前一位结束&#xff08;不包含结束位…

LeetCode 1057. 校园自行车分配(map有序+贪心)

文章目录1. 题目2. 解题1. 题目 在由 2D 网格表示的校园里有 n 位工人&#xff08;worker&#xff09;和 m 辆自行车&#xff08;bike&#xff09;&#xff0c;n < m。所有工人和自行车的位置都用网格上的 2D 坐标表示。 我们需要为每位工人分配一辆自行车。在所有可用的自…

python中的字符串操作及注意事项

1.mystr.find(str, start0, endlen(mystr)) 检测str是否包含在mystr中,如果是返回开始的索引值,否则返回-1.mystr.rfind(str, start0,endlen(mystr) ) 类似于find()函数&#xff0c;不过是从右边开始查找.2.mystr.index(str, start0, endlen(mystr)) 跟f…

linux配ipv6 ipv4 双栈,RouterOS配置原生IPv6(电信IPv4/IPv6双栈)

无意中发现江苏(苏州)电信的原生IPv6改为有状态的IPv6&#xff0c;那么我使用的RouterOS软路由(以下简称ROS)就可以获取到IPv6的地址了&#xff0c;所以又可以折腾了一波。一、IPv6介绍IPv6的地址共有128位&#xff0c;也就是IPv6地址总量一共有2的128次方个地址。/32、/48是IP…

java mail 设置参数

Session需要使用java.util.Properties来构造&#xff0c;常用的用来构造Session的属性&#xff1a; 属性名 含义 mail.smtp.user SMTP的缺省用户名。 mail.smtp.host 要连接的SMTP服务器。 mail.smtp.port 要连接的SMTP服务器的端口号&#xff0c;如果connect没有指明端口号就使…

LeetCode 555. 分割连接字符串

文章目录1. 题目2. 解题1. 题目 给定一个字符串列表&#xff0c;你可以将这些字符串连接成一个循环字符串&#xff0c;对于每个字符串&#xff0c;你可以选择是否翻转它。 在所有可能的循环字符串中&#xff0c;你需要分割循环字符串&#xff08;这将使循环字符串变成一个常规…

libusb android pc,libusb

# libusb[![Build Status](https://travis-ci.org/libusb/libusb.svg?branchmaster)](https://travis-ci.org/libusb/libusb)[![Build status](https://ci.appveyor.com/api/projects/status/xvrfam94jii4a6lw?svgtrue)](https://ci.appveyor.com/project/LudovicRousseau/li…

LeetCode 314. 二叉树的垂直遍历(BFS/DFS)

文章目录1. 题目2. 解题2.1 DFS2.2 BFS1. 题目 给定一个二叉树&#xff0c;返回其结点 垂直方向&#xff08;从上到下&#xff0c;逐列&#xff09;遍历的值。 如果两个结点在同一行和列&#xff0c;那么顺序则为 从左到右。 示例 1&#xff1a; 输入: [3,9,20,null,null,15…

python中的元组及注意事项

与列表类似&#xff0c;元组也是由任意类型元素组成的序列。与列表不同的是&#xff0c;元组是不可改变&#xff0c;这意味着一旦元组被定义&#xff0c;将无法再进行增加、删除或修改元素等操作。因此&#xff0c;元组就像一个不可改变的列表。在许多地方元组都可以替换列表&a…

Android 利润,惊人利润:Android系统免费背后影藏的巨大利润

Android用户群体的庞大数量有目共睹&#xff0c;并且Android一直以免费为噱头&#xff0c;如果是一直免费&#xff0c;那么Android背后庞大的团队是靠什么经济来源支撑着Android一代又一代的更新&#xff1f;近日有网友披露谷歌的Android系统已经创造了310亿美元的营收&#xf…

LeetCode 336. 回文对(哈希map/Trie树)

文章目录1. 题目2. 解题2.1 哈希map2.2 Trie树1. 题目 给定一组唯一的单词&#xff0c; 找出所有不同 的索引对(i, j)&#xff0c;使得列表中的两个单词&#xff0c; words[i] words[j] &#xff0c;可拼接成回文串。 示例 1: 输入: ["abcd","dcba",&qu…

链接

Qt下载&#xff1a;http://qt-project.org/downloads/ Qt Creator中无法使用OpenCV2中新函数的解决办法: http://blog.csdn.net/masikkk/article/details/8748865 自建CDN技术选型: squid varnish nginx: http://www.linuxde.net/2013/05/13492.html转载于:https://www.cnblogs…

python中的常见的列表操作及注意事项

1.1 使用append()添加元素到尾部传统的向列表中添加元素的方法是利用append()函数将元素一个个添加到尾部。1.2 使用extend()或合并列表使用extend()可以将一个列表合并到另一个列表中&#xff0c;我们也可以使用.1.3 使用insert()在指定位置插入元素append()函数只能将新元素插…