好看的网站你明白的,专业信息门户网站定制,百度关键词搜索排名代发,专门做水生植物销售网站3.无重复字符的最长字串
给定一个字符串 s #xff0c;请你找出其中不含有重复字符的 最长
子串 的长度。
示例 1:
输入: s abcabcbb
输出: 3
解释: 因为无重复字符的最长子串是 abc#xff0c;所以其长度为 3。示例 2:
输入: s bbbb…3.无重复字符的最长字串
给定一个字符串 s 请你找出其中不含有重复字符的 最长
子串 的长度。
示例 1:
输入: s abcabcbb
输出: 3
解释: 因为无重复字符的最长子串是 abc所以其长度为 3。示例 2:
输入: s bbbbb
输出: 1
解释: 因为无重复字符的最长子串是 b所以其长度为 1。
思路详解使用滑动窗口定义两个指针指向数组的左边和右边右边界只需要一直移动即可左边界需要判断是否有字符与窗口内字符相同如果有更新左边界当右边界移动到数组尾部计算滑动窗口大小即可。
代码详解
class Solution {
public:int lengthOfLongestSubstring(string s) {int ans0,smax0;int ns.length();//记录字符串长度if(n0)return 0;int i0,j0;while(jn)//j为右边界{for(int xi;xj;x)//x为左边界{if(s[x]s[j])//移动滑动窗口如果遇到相同元素就停下计算最长子串{ix1;//修改左边界ansj-i;//重新计算字串长度break;}}j;ans;//移动右边界最大长度加一smaxanssmax?ans:smax;}return smax;}
};
面经
什么是c中的移动语义有什么作用什么是右值引用
C中的移动语义是一种优化资源管理的语言特性它是在C11标准中引入的。移动语义允许资源的“所有权”从一个对象转移到另一个对象这通常涉及到对资源的浅层拷贝从而避免了不必要的复制操作提高了性能
作用
当对象被作为参数传递给函数或者从函数返回时如果使用移动语义可以避免深度复制只进行资源的指针交换。对于含有大量数据的对象如字符串、容器、文件内容等移动操作可以大幅度减少内存拷贝和数据构造的时间。
例如在实现某些容器的操作时如 vector 的 push_back移动语义可以使得返回值优化成为可能从而实现链式调用。移动语义允许函数返回局部对象的副本而不会导致性能损失。
右值引用
是一种引用类型可以绑定到右值通常是临时对象上。使用 来表示。
使用右值引用来实现一个移动语义
#include iostream
#include vector
using namespace std;
class MyString {
public:char* data;MyString(const char* p) {data new char[strlen(p) 1];strcpy(data, p);}// 移动构造函数MyString(MyString other) noexcept : data(other.data) {other.data nullptr; // 使原对象不再拥有资源}// 移动赋值运算符MyString operator(MyString other) noexcept {if (this ! other) {delete[] data;data other.data;other.data nullptr;}return *this;}~MyString() {delete[] data;}
};
int main() {MyString a Hello World;MyString b move(a); // 调用移动构造函数// 此时a不再拥有数据b拥有原a的数据return 0;
}