当前位置: 首页 > news >正文

实习冲刺第二十七天

3.无重复字符的最长字串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 

子串

 的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

思路详解:使用滑动窗口,定义两个指针指向数组的左边和右边,右边界只需要一直移动即可,左边界需要判断是否有字符与窗口内字符相同,如果有更新左边界,当右边界移动到数组尾部,计算滑动窗口大小即可。

代码详解:

class Solution {
public:int lengthOfLongestSubstring(string s) {int ans=0,smax=0;int n=s.length();//记录字符串长度if(n==0)return 0;int i=0,j=0;while(j<n)//j为右边界{for(int x=i;x<j;x++)//x为左边界{if(s[x]==s[j])//移动滑动窗口如果遇到相同元素就停下计算最长子串{i=x+1;//修改左边界ans=j-i;//重新计算字串长度break;}}j++;ans++;//移动右边界,最大长度加一smax=ans>smax?ans:smax;}return smax;}
};

面经

  1. 什么是c++中的移动语义,有什么作用,什么是右值引用

C++中的移动语义是一种优化资源管理的语言特性,它是在C++11标准中引入的。移动语义允许资源的“所有权”从一个对象转移到另一个对象,这通常涉及到对资源的浅层拷贝,从而避免了不必要的复制操作,提高了性能

作用:

  • 当对象被作为参数传递给函数或者从函数返回时,如果使用移动语义,可以避免深度复制,只进行资源的指针交换。
  • 对于含有大量数据的对象(如字符串、容器、文件内容等),移动操作可以大幅度减少内存拷贝和数据构造的时间。
  • 例如,在实现某些容器的操作时(如 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;
}

http://www.lryc.cn/news/488815.html

相关文章:

  • el-table-column自动生成序号在序号前插入图标
  • 前端工程化-node/npm/babel/polyfill/webpack 一文速通
  • Spring Security PasswordEncoder接口(密码编码)
  • C# 数据结构之【树】C#树
  • 树莓派2装FreeBSD14.1 Raspberry Pi2 install FreeBSD14.1 00000121:error:0A000086:SSL
  • 探索C/C++的奥秘之stack和queue
  • [开源]1.2K star!中后台方向的低代码可视化平台,超赞!
  • 算法编程题-排序
  • 【AIGC】如何准确引导ChatGPT,实现精细化GPTs指令生成
  • 【Axure高保真原型】或和且条件
  • KubeVirt下gpu operator实践(GPU直通)
  • Vue通过file控件上传文件到Node服务器
  • 如何在 SQL Server 中新增账户并指定数据库权限
  • c#编码技巧(十九):各种集合特点汇总
  • 汽车软件DevOps解决方案
  • 同步的意义以及机制
  • leetcode 面试150之 156.LUR 缓存
  • 启发式搜索算法复现
  • 【IDE】使用指南
  • 设计编程网站集:简述可扩展性系统设计(笔记)
  • 「Mac玩转仓颉内测版25」基础篇5 - 布尔类型详解
  • Fashion-VDM:引领视频虚拟试穿技术的新篇章
  • Scala中的集合复习(1)
  • Java依赖包漏洞检测命令
  • 【Java】强制类型转换
  • RabbitMQ消息可靠性保证机制4--消费端限流
  • 查找萤石云IOS Sdk中的编解码接口
  • erchas
  • 【网络安全】SSL(一):为什么需要 Keyless SSL?
  • ggplot2 分面图等添加注释文字,相加哪里加哪里: 自定义函数 AddText()