今天在刷力扣时,遇到一道题:
原题链接:https://leetcode-cn.com/problems/first-unique-character-in-a-string/
我是想着用队列的方式去解决。但是没有想到还有pair这个函数。可以往队列里面同时放两个参数。见识少了。。这里记录一下pair的用法!
pair定义
pair是一种简单的模板类型,其中包含两个数据值,类似map的键值对,两个数据的类型可以不同。
pair初始化
1. pari<T1 , T2> p1 //创建一个空的pair对象,它的两个元素分别是T1 和T2类型,采用直初始化
2. pair<T1, T2> P1(V1 , V2) //创建一个pair对象,它的两个元素分别是T1 和T2类型,其中first成员初始化为v1,而second 成员初始化为v2
3. make_pair(v1 , v2) //以v1和v2值创建一个新的pair对象,其元素类型分别是T1 和T2类型
pair属性
p.first 和 p.second
对应map的key,value。
定义多个形同pair类型 ,简化声明
typedef pair<string, string> author;
author pro("May", "Lily");
author joye("James", "Joyce");
实例用法
上题利用队列和pair解答方法:
class Solution {
public:
int firstUniqChar(string s) {
unordered_map<char, int> position;
queue<pair<char, int>> q;
int n = s.size();
for (int i = 0; i < n; ++i) {
if (!position.count(s[i])) {
position[s[i]] = i;
q.emplace(s[i], i);
}
else {
position[s[i]] = -1;
while (!q.empty() && position[q.front().first] == -1) {
q.pop();
}
}
}
return q.empty() ? -1 : q.front().second;
}
};
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END