阴沟翻船题——Longest Substring Without Repeating Characters

一、事件概述

今天接到一个面试,让线上做题。面试官出了个leetcode的题。题目如图所示:
在这里插入图片描述
我没有刷过leetcode,上学时候我们做的hdu-acm和codeforces。咋一接到题目,看到是个字符串题,并且找最长字串,第一反应就是DP。
这一反应,导致我始终无法绕靠DP找迭代的思路,最后没做出来。
后来静下心来一想,这TM就是道水题。

二、题解思路

2.1 题目大意

给一个字符串,找到一个最长的自串,使这个子串没有重复的字符。

2.2 方案1——2重循环求解

由于assic码字符范围只有0~255,那么我们可以用一个bool[] 数组,记录特定字符是否已经使用过。
每重循环,查找以i开头的字符串,最长走到哪里没有重复字符。

int Solution3::lengthOfLongestSubstring(std::string s)
{int maxLen = 0;for (int i = 0; i < s.size(); i++) {bool arr[256];memset(arr, 0, sizeof(bool) * 256);int curLen = 0;for (int j = i; j < s.size(); j++) {char c = s[j];if (!arr[c]) {arr[c] = true;curLen++;}else {break;}}maxLen = max(maxLen, curLen);}return maxLen;
}

2.3 方案2——一次循环模拟

2.2是个O(n^2)的算法,我们能否优化以下么?
以abcabcabdd为例子,我们只看i=0时的循环,当i=3时,当前字符为a,在之前出现过了。
我们是否可以再定义一个起始指针beg,当出现重复的字符时,我们把beg指针后移,并且置空beg位置字符的标志位,直到beg处的字符和i处的字符相同。
基于这个想法,就有了这段代码:

int Solution3::lengthOfLongestSubstring_effective(std::string s)
{bool arr[256];memset(arr, 0, sizeof(bool) * 256);int beg = 0, idx = 0;int sizeN = s.size();int maxRes = 0;int curRes = 0;while (idx < sizeN) {char c = s[idx];if (arr[c]){maxRes = max(maxRes, curRes);char bc;do{bc = s[beg];arr[bc] = false;curRes--;beg++;}while (beg < idx && bc != c);}curRes++;arr[c] = true;idx++;}maxRes = max(maxRes,curRes);return maxRes;
}

三、感想

未来我们都会变成招聘的一方,笔试算法题的目的是看候选人的编码能力,我们应当尽量避免误导的情况。尤其是一些问题,看着很像算法题,市面上类似问题都有个巧妙的解法。而候选人不见得是刚从学校出来,可能很多年不碰算法题了。这时这样的问题就会造成很大的困扰。
我认为,如果考察候选人编码模拟能力,最好找些很明确的搜索题,或者一眼看上去就不像搞算法的模拟题。
如果硬要出这道题,可以给出提示,关键词——模拟。给出时间复杂度建议O(n)。我相信这样就可以更客观的评价候选人的编码能力了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6194.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s使用nfs持久卷

开启持久化卷后可以实现服务开启在不同节点也能读取到和拿到服务节点的文件。 基本流程为将集群中一个节点作为服务节点安装共享储存应用的服务端选择目录和开启端口&#xff0c;其他节点根据端口挂载目录。然后使用kubesphere选择相应的镜像并将端口信息和挂载目录信息作为参…

数据结构测试题2

一、单选题&#xff08;每题 2 分&#xff0c;共20分&#xff09; 1. 栈和队列的共同特点是( A )。 A.只允许在端点处插入和删除元素 B.都是先进后出 C.都是先进先出 D.没有共同点 2. 用链接方式存储的队列&#xff0c;在进行插入运算时( C ) A. 仅修改头指针 B. 头…

嵌入式知识点总结 操作系统 专题提升(一)-进程和线程

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.什么是进程&#xff1f;什么是线程&#xff1f; 2.进程和线程有什么区别&#xff1f; 3.何时使用多进程&#xff0c;何时使用多线程&#xff1f; 4.进程有几种状态&#xff…

Spring Security(maven项目) 3.0.2.6版本—总

通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往复以至无穷&#xf…

【2024年华为OD机试】(A卷,200分)- 简单的解压缩算法 (JavaScriptJava PythonC/C++)

一、问题描述 题目描述 现需要实现一种算法&#xff0c;能将一组压缩字符串还原成原始字符串&#xff0c;还原规则如下&#xff1a; 字符后面加数字N&#xff0c;表示重复字符N次。例如&#xff1a;压缩内容为 A3&#xff0c;表示原始字符串为 AAA。花括号中的字符串加数字N…

K8S中Service详解(一)

Service介绍 在Kubernetes中&#xff0c;Service资源解决了Pod IP地址不固定的问题&#xff0c;提供了一种更稳定和可靠的服务访问方式。以下是Service的一些关键特性和工作原理&#xff1a; Service的稳定性&#xff1a;由于Pod可能会因为故障、重启或扩容而获得新的IP地址&a…

jenkins-k8s pod方式动态生成slave节点

一. 简述&#xff1a; 使用 Jenkins 和 Kubernetes (k8s) 动态生成 Slave 节点是一种高效且灵活的方式来管理 CI/CD 流水线。通过这种方式&#xff0c;Jenkins 可以根据需要在 Kubernetes 集群中创建和销毁 Pod 来执行任务&#xff0c;从而充分利用集群资源并实现更好的隔离性…

LabVIEW滤波器选择与参数设置

在信号处理应用中&#xff0c;滤波器是去除噪声、提取目标信号的重要工具。LabVIEW 提供多种类型的滤波器&#xff08;如低通、高通、带通、带阻&#xff09;&#xff0c;用户需要根据采样频率、信号特性和应用需求合理选择滤波器类型及参数设置。本文以 采样率 100kHz&#xf…

iOS中的设计模式(四)- 抽象工厂

引言 在软件设计中&#xff0c;创建一个类的对象通常需要客户端知道该类的所有细节。而当需要同时创建一组相关对象时&#xff0c;且这些对象在运行时会根据不同的标准有所变化&#xff0c;这会变得更加复杂。此时&#xff0c;抽象工厂模式能够有效地简化这一过程。 抽象工厂…

deeplabv3+街景图片语义分割,无需训练模型,看不懂也没有影响,直接使用,cityscapes数据集_12

目录 1、下载链接1.1、CSDN链接&#xff0c;含权重文件直接使用&#xff0c;建议直接下这个&#xff0c;还不限速。1.2 Github链接&#xff1a;2、下载代码&#xff0c;下载预训练好的权重3、预测代码4、像素提取&#xff0c;或者说类别提取5、文档部分内容截图6、其他数据处理…

Java 基于 SpringBoot 的校园外卖点餐平台微信小程序(附源码,部署,文档)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Jetson Xavier NX 安装 CUDA 支持的 PyTorch 指南

本指南将帮助开发者完成在 Jetson Xavier NX 上安装 CUDA 支持的 PyTorch。 安装方法 在 Jetson 上安装 Pytorch 只有两种方法。 一种是直接安装他人已经编译好的 PyTorch 轮子&#xff1b;一种是自己从头开始开始构建 PyTorch 轮子并且安装。 使用轮子安装 可以从我的 Gi…

怎样使用树莓派自己搭建一套ADS-B信号接收系统

0 我们知道&#xff0c;ADS-B全称广播式自动相关监视系统&#xff0c;其实就是飞机发出的广播信号&#xff0c;用明码来对外发送自己的位置、高度、速度、航向等信息&#xff0c;是公开信息。连续接收到一架飞机发出的ADS-B信息后&#xff0c;可以通过其坐标点来描绘出飞机的航…

KETTLE-SAP抽数报错RFC_ERROR_SYSTEM_FAILURE

KETTLE调SAP 合并ECCS相关的函数时报错 2025/01/23 17:56:02 - SAP input.0 - ERROR (version 8.2.0.0-342, build 8.2.0.0-342 from 2018-11-14 10.30.55 by buildguy) : Unexpected error 2025/01/23 17:56:02 - SAP input.0 - ERROR (version 8.2.0.0-342, build 8.2.0.0-3…

困境如雾路难寻,心若清明步自轻---2024年创作回顾

文章目录 前言博客创作回顾第一次被催更第一次获得证书周榜几篇博客互动最多的最满意的引发思考的 写博契机 碎碎念时也运也部分经验 尾 前言 今年三月份&#xff0c;我已写下一篇《近一年多个人总结》&#xff0c;当时还没开始写博客。四月份写博后&#xff0c;就顺手将那篇总…

2024 行远自迩,笃行不怠

2024年是充满变化与挑战的一年&#xff0c;我的开发方向经历了从智能驾驶到工业智能检测&#xff0c;再到机器人感知交互与决策的不断演进。 这一年&#xff0c;我不断拓宽技术视野&#xff0c;深入探索不同领域的技术挑战和应用场景。 最初&#xff0c;我希望专注于单一领域…

【Linux】19.基础IO(1)

文章目录 1. 基础IO1. 文件2. 回顾C文件接口2.1 hello.c写文件2.2 hello.c读文件2.3 接口介绍 3. open函数返回值3.1 文件描述符fd3.2 文件描述符的分配规则3.2.1 代码13.2.2 代码23.2.3 重定向底层原理代码示例3.2.4 使用 dup2 系统调用 3.3 缓冲区刷新问题3.4 FILE 1. 基础IO…

客户案例:向导ERP与金蝶云星空集成方案

一、客户背景 该客户公司主要致力于黄金、铂金、金镶玉首饰的研发设计、生产加工、批发及直营加盟业务。公司总部占地面积目前已达6000多平方米&#xff0c;拥有标准生产厂房和现代化生产设施&#xff0c;拥有一支完善的企业管理团队和专业技工队伍。 该企业目前同时采用向导 E…

RabbitMQ 在实际应用时要注意的问题

1. 幂等性保障 1.1 幂等性介绍 幂等性是数学和计算机科学中某些运算的性质,它们可以被多次应⽤,⽽不会改变初始应⽤的结果. 应⽤程序的幂等性介绍 在应⽤程序中,幂等性就是指对⼀个系统进⾏重复调⽤(相同参数),不论请求多少次,这些请求对系统的影响都是相同的效果. ⽐如数据库…

Cesium特效——城市白模的科技动效的各种效果

最终效果图如下&#xff1a; 实现方法&#xff1a; 步骤一&#xff1a;使用cesiumlib生产白模&#xff0c;格式为3dtiles 注意事项&#xff1a;采用其他方式可能导致白模贴地&#xff0c;从而导致不能实现该效果&#xff0c;例如把步骤二的服务地址改为Cesium Sandcastle 里的…