字符串处理
时间相关的字符串处理
- 时间”HH:MM:SS”这种记录方式用string存储,可以直接用>,<,=号比较
双指针(常用)
用来找区间
i指针是慢指针,j是快指针,最初i=j,然后j在符合性质的过程中不断++(while循环),直到不符合性质后跳出,那么i…j-1这个区间内就是要处理的区间!处理完后i=j。
int i=0,j=0;
for(;i<str.size();i++)
{
//双指针 i是快指针 在for中遍历
if(check(str[i]))
{
j=i;
while(j<str.size() && check(str[j])) j++;
string x=str.substr(i,j-i);//从i到j-1
//插入hash表中
mp[x]++;
i = j-1;
}
}
on-off配对/in-out配对问题
排队问题
加速
ios::sync_with_stdio(false);cin.tie(0);
STL相关
string
- 数字经常用string来处理,方便对每一位进行操作
- s.substr(x)表示从s的下标x开始一直到截至到s的最后一位
- s.find(“.”)返回”.”的下标,-1表示不存在
map和set
- map和set自带排序顺序,插入的时候就按序插入
默认的排序方式为key升序排序
priority_queue
优先队列priority_queue在c++中在queue头文件中,能够在$O(1)$的时间内找到最大的元素(默认为大顶堆),并且能在在$O(logn)$的时间内插入和删除元素。
priority_queue<int> q_default;//默认是大顶堆序
priority_queue<int,vector<int>,less<int> >q;//大顶堆
priority_queue<int,vector<int>,greater<int> > q2;//小顶堆
memset函数
对于int数组,只能初始化为0、-1、0x3f这几种选择,其余的会出错