记录自己碰到的一些cpp知识点

本文分享了作者在学习和解决LeetCode题目时遇到的C++编程挑战,涉及到`substr`函数、迭代器的`find`方法以及C++17的if初始化器,重点讲述了如何使用双指针技巧解决最长不重复子串问题的过程。
摘要由CSDN通过智能技术生成

记录自己碰到的一些cpp知识点,每次用都要查,然后我还得自己用个例子测试下,手动记一下省的每次都弄。今天想试着刷刷lc结果一道题得查很多知识点,费劲三小时,当然其中还有我玩手机各种转移注意力,一道简单的双指针的题,我之前很少用迭代器,今天顺着程序走了一通看着伪代码很简单的东西但是想了半天,希望下次能快一点相通

substr

// substr的第一个参数是数组位置,第二个参数是截取的字符长度
// string substr (size_t pos = 0, size_t len = npos) const;
string test = "teststrsubstr";
string tempStr2 = test.substr(0, 1); // 截取字符串的第一个字符

InputIterator find (InputIterator first, InputIterator last, const T& val)
返回值,当查找到时,返回查找到的第一个元素的迭代器,没找到则返回last,

std::distance(i, j)
记录两个迭代器之前的元素个数,参数为两个迭代器,这种涉及迭代器的元素区间一般都是[)

C++17的if初始化器

int lengthOfLongestSubstring(string s) {
	int maxLen = 0;
	if (s.size() == 0)
		return maxLen;

	// 思路,双指针,i指向队列左节点,j指向队列右节点
	// 默认每次循环都令j增加,左节点仅在当有重复字符时增加
	// 循环结束条件一般是右指针遍历到字符串末尾
	maxLen++;
	for (auto i = s.begin(), j = i + 1; i != s.end(), j != s.end(); j++) {
		//如果找到该元素,剔除第一个,令左指针移动,初始化的语法如下,it迭代器的作用域在以下ifelse中皆可使用
		if (auto it = find(i, j, *j);it != j)
		{
			// 找到了该元素,令i指向该元素+1的位置
			i = ++it;
		}
		// 如果找到的元素不存在,find应该会返回处于j的迭代器
		else
		{
			int count = std::distance(i, j)+1;
			if (maxLen < count)
			{
				maxLen = count;
			}
		}
	}
	return maxLen;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值