C++算法题目分析--双指针,滑动窗口

 

目录

一.双指针

(1)反转字符串中的字符

(2)等腰三角形【算法赛】

二.滑动窗口 

(1)挑选子串

(2)最长子串

 (3)全部都有的子序列

 

一.双指针

(1)反转字符串中的字符

分析:

  因为cin遇到第一个空格就停止输入

  1. 

cin.getline():

cin.getline()函数是‌C++中的一个函数,用于从标准输入(cin)中读取一行文本并存储在指定的字符串变量中。它属于istream类,需要在cin对象上调用。cin.getline()函数会一次读取多个字符(包括空白字符),直到读满N-1个字符或遇到指定的结束符为止。如果不指定结束符,则默认结束符为换行符,此函数并不保留结束符,而是用空字符替换结束符。

cin.getline()函数的特点包括:

  1. 能够读取空格字符,如果输入的字符中存在空格,则空格之后的数据也会被读取。‌
  2. 可以自定义结束符,但如果不指定结束符,则默认结束符为换行符。‌
  3. 读取的字符串存储在字符数组中,而不是存储在字符串对象中。

cin.getline()与cin.get()的区别在于对换行符的处理。cin.getline()在遇到换行符时,会将换行符从输入队列中提取并抛弃,而cin.get()函数不再提取并抛弃换行符,仍将其留在输入队列中。因此,在使用cin.get()之后,需要紧接着使用cin.get()来提取换行符,否则可能会导致cin.getline()无法正确读取输入。‌

参数:cin.getline( 字符指针(char*) , 字符个数N(int) , 结束符(char) );

  2.若为string类则用getline(cin,s,'\n');

(2)等腰三角形【算法赛】

分析:

  1.由三角形两边之和大于第三边,所以只用判断等腰三角形的两个腰是否大于底边。

  2.将腰和边都排序,因为题目只要求求最多组成个数,所以用最小的腰与最小匹配的底边即可。

二.滑动窗口 

模板:在0/1数组统计和大于2的连续子串个数

(1)挑选子串

分析:

1.将符合条件的数转化为1,否则0。通过滑动窗口统计子串个数。

(2)最长子串

分析:

  1.(13-26)通过hash计数器作为元素存在个数的限制条件。每次将hash[a[j]]++,然后记录子串的长度,不断更新长度为最大值。如果>k,则为以该字符开头的最长子串。然后将i++,即头字符改变,循环到<=k。只有j++,ret才可能变化。

 (3)全部都有的子序列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值