滑动关机代码bat_BAT面试算法进阶--(2) 无重复字符的最长子串(滑动法优化+ASCII码法)...

一.算法题

  • 题目

Given a string, find the length of the longest substring without repeating characters.

  • Example
  • Given "abcabcbb", the answer is "abc", which the length is 3.
  • Given "bbbbb", the answer is "b", with the length of 1.
  • Given "pwwkew", the answer is "wke", with the length of
  • Note that the answer must be a substring, "pwke" is a subsequence and not a substring.


二.算法题解读

  • 题目大意:给定一个字符串,找出不含有重复字符的最长子串的长度
  • 解读Example
  • 给定"abcabcbb",没有重复字符的最长子串是"abc",那么长度就是3
  • 给定"bbbbb",最长子串就是"b",长度就是1
  • 给定pwwkew,最长子串就是"wke",长度为3,
  • ==注意,==必须是一个子串."pwke",是子序列,而不是子串


三.优化"滑动窗口"解决思路
到底如何在滑动窗口方法上优化了? 实际上我们可以如果采用进一步优化,可以达到只需要N次即可计算成功.我们可以定义字符到索引映射.而不是使用集合来判断这个字符的存在与否.当遇到重复的字符时,我们即可跳过该滑动窗口.
也可以理解为,如果s[j]在[i,j)的范围内有与j'重复的字符.我们不需要逐渐增加i.而是直接跳过[i,j']范围内的所有元素.并将i变成为j'+1就可以做到.
四.代码实现java code

public class Solution {public int lengthOfLongestSubstring(String s) {int n = s.length(), ans = 0;//获取当前字符索引Map<Character, Integer> map = new HashMap<>();         //修改[i,j]的范围       for (int j = 0, i = 0; j < n; j++) {if (map.containsKey(s.charAt(j))) {i = Math.max(map.get(s.charAt(j)), i);}ans = Math.max(ans, j - i + 1);map.put(s.charAt(j), j + 1);}return ans;}
}


五.使用ASCII 128码 思路
字符串,其实由字符构成.而字符则可以用ASC码来替代.如此,我们可以用整数数组作为直接访问表来替换Map.常用表如下:
int [26],用于表示字母 "a" - "z" 或 "A" - "Z";
int [128],用于表示ASCII码
int [256],用于表示扩展ASCII码
A = 65, a = 97

a9b2e49cb4fe88113fe66c26dfb48c47.png


六.代码实现java code

public class Solution {public int lengthOfLongestSubstring(String s) {int n = s.length(), ans = 0;int[] index = new int[128];         for (int j = 0, i = 0; j < n; j++) {i = Math.max(index[s.charAt(j)], i);ans = Math.max(ans, j - i + 1);index[s.charAt(j)] = j + 1;}return ans;}
}
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:642363427不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

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

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

相关文章

jpa findone怎么用_Jpa VS MyBatis,你用哪个?

经常看到有小伙伴在讨论 JPA 和 MyBatis 这两个孰优孰劣的问题&#xff0c;其实松哥觉得这是一个伪命题&#xff0c;没必要为这种问题争个面红耳赤&#xff0c;每种框架有它存在的道理&#xff0c;也有各自擅长的事情&#xff0c;今天松哥就和大家来聊聊这两个框架&#xff0c;…

国家开放大学本科计算机应用基础,【(精华版)最新国家开放大学电大本科《计算机应用基础》网络课网考形考作业一及三试题答案】.docx...

【(精华版)最新国家开放大学电大本科《计算机应用基础》网络课网考形考作业一及三试题答案】(精华版)最新国家开放大学电大本科《计算机应用基础》网络课网考形考作业一及三试题答案 盗传必究 形考作业一 一、单选题 1当前的计算机一般被认为是第四代计算机&#xff0c;它所采用…

Reset Password 重置密码 (CentOS 5,6,7 ; Juniper Networks: SRX100 )

一些重置root 密码的文档分享&#xff08;来自官网&#xff09;&#xff1a; CentOS 5&#xff0c;6&#xff0c;7 Juniper Networks : SRX100 链接&#xff1a;https://share.weiyun.com/5BM4kwK 密码&#xff1a;f3t5xu转载于:https://www.cnblogs.com/ling3blog/p/905018…

python正则表达式中的转义字符_python 正则表达式之转义字符

最近在整理python相关的知识&#xff0c;使用python对网站进行爬取数据的时候&#xff0c;需要使用到转义字符&#xff0c;之前对转义字符理解一直比较模糊&#xff0c;并且在python中还有一个叫原生字符r。所以通过网上调查资料对该内容进行整理&#xff0c;已备不时之需。 字…

计算机控制系统a卷-答案,计算机控制系统2010-2011年试题A答案

济南大学2010 &#xff5e;2011学年第一学期课程考试试卷(A卷)4、振铃现象&#xff1a;(虽然闭环系统输出较快地趋向于稳态值)……课 程 计算机过程控制系统 授课教师 王小平 数字调节器输出u(kT)以2T为周期上下摆动。………考试时间 2010年 12 月 30日 考试班级 … ……学 号 …

非root用户ssh 执行 sudo远程机器免密钥

非root用户ssh 执行 sudo远程机器免密钥 # 1、登陆192.168.1.10 ssh-keygen -t rsa # 一路回车 # 将公钥添加到认证文件中 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 并设置authorized_keys的访问权限 chmod 600 ~/.ssh/authorized_keys [rootwebserver ~]# c…

分数的拆分原理和方法_常见的节税原理你知道吗?

节税可以帮助大家合理的降低税收支出&#xff0c;然后实现企业以及利益的最大化。但是节税的时候一般都会使用一些节税原理&#xff0c;因为不同的结节税原理会有不同的节税方法&#xff0c;这样节税效果也是不同的&#xff0c;那么生活中有哪些常见的节税原理呢&#xff1f;第…

Flume实战监听文件夹内文件变化

Flume官网有多种场景的source&#xff0c;sink&#xff0c;channel的配置 1、flume安装目录下新建文件夹 example 2、在example下新建文件 spooldir-logger.conf内容如下&#xff1a; a1.sources r1 a1.sinks k1 a1.channels c1# Describe/configure the source a1.source…

python如何获取输入_python如何从键盘获取输入实例

python中使用input()函数来获取用户输入 函数 input() 让程序暂停运行&#xff0c;等待用户输入一些文本&#xff0c;获取用户的输入后&#xff0c;Python将其存储到一个变量中&#xff0c;以方便后期使用。 name input("Tell me your name,and I will repeat it back to…

cad打印本计算机未配置,CAD打印的基本设置详细教程

CAD打印的基本设置详细教程开始画图之前我们就考虑到打印的需要&#xff0c;要用多大纸张&#xff0c;打印比例应该设置成多少&#xff0c;打印后的字高、线宽、颜色应该设置成多少&#xff0c;在绘制图形的时候&#xff0c;这些为打印而做的准备工作必须做好。要想正确地打印图…

原 BinaryWriter和BinaryReader(二进制文件的读写)

原文 BinaryWriter和BinaryReader&#xff08;二进制文件的读写&#xff09; C#的FileStream类提供了最原始的字节级上的文件读写功能&#xff0c;但我们习惯于对字符串操作&#xff0c;于是StreamWriter和 StreamReader类增强了FileStream&#xff0c;它让我们在字符串级别上操…

python redis 消息队列_Python的Flask框架应用调用Redis队列数据的方法

任务异步化打开浏览器&#xff0c;输入地址&#xff0c;按下回车&#xff0c;打开了页面。于是一个HTTP请求&#xff08;request&#xff09;就由客户端发送到服务器&#xff0c;服务器处理请求&#xff0c;返回响应&#xff08;response&#xff09;内容。 我们每天都在浏览网…

go ip过滤_用Go实现自己的爬虫

作者&#xff1a;Masamune在日常生活中&#xff0c;我们时常会遇到一些采集数据相关的需求&#xff0c;比如获取一些官方数据整理到excel表中进行统计&#xff0c;聚合一些网页新闻提高自己的阅读效率等等。虽然许多爬虫教程都是用python写的&#xff0c;但是我认为Go语言是比p…

Flume实战采集文件内容存入HDFS

1、flume安装目录下新建文件夹 example 2、在example下新建文件 log-hdfs.conf 内容如下&#xff1a; # Name the components on this agent a1.sources r1 a1.sinks k1 a1.channels c1#exec 指的是命令 # Describe/configure the source a1.sources.r1.type exec #F…

总结计算机语言的基本元素,认识程序设计中基本元素教案.doc

曲靖师院计算机科学与工程学院学生试讲教案表课题&#xff1a;认识程序中的基本元素 年级&#xff1a;高一 课时&#xff1a;1课时授课时间&#xff1a;20分钟 讲授者&#xff1a;秦巧林 指导教师&#xff1a;崔丽梅教学目标知识与技能1. 掌握计算机程序中常用的常量、变量、函…

python海龟绘图圆形_python之海龟绘图

1. 基本功能介绍 在海龟作图中&#xff0c;我们可以编写指令让一个虚拟的&#xff08;想象中的&#xff09;海龟在屏幕上来回移动。这个海龟带着一只钢笔&#xff0c;我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条。通过编写代码&#xff0c;以各种很酷的模式移动海龟&a…

PLSQL Developer导入csv文件到oracle

csv文件内容&#xff1a; 要导入的表结构 create table RPT_MONILUCE_2_P01 ( imsi NUMBER, road_line NUMBER, ci NUMBER, diff NUMBER, rn NUMBER, sdate DATE, report_id NUMBER(20) ) 步骤&#xff1a; 1、在csv第一行上增加…

erwin 不能输入中文_国产开源建模软件PDMan与国外商业建模软件ERwin的主要功能比较...

在数据库建模的过程中&#xff0c;我们经常会使用到ERwin或者Power Designer之类的建模软件&#xff0c;来构建我们的逻辑模型和物理模型。但是这类软件都属于商业软件&#xff0c;需要企业购买相应的许可证授权。有些时候&#xff0c;我们会在没有购买这类商业建模软件的环境下…

Confluence 6 workbox 通知包含了什么

当一个用户在 Confluence 中进行下面的操作的时候&#xff0c;workbox 将会显示为通知&#xff1a; 分享&#xff08;Shares&#xff09; 你的页面或者博客页面。 提及&#xff08;Mentions&#xff09; 你的页面&#xff0c;博客页面&#xff0c;回复或者任务。你 关注&#x…

已知一点经纬度,方位角,距离,求另一点经纬度

参考了博文&#xff1a;http://blog.csdn.net/pyx6119822/article/details/52298037 ------------------------------------------------ package hellotest;public class LonLatTest3 {/** 大地坐标系资料WGS-84 长半径a6378137 短半径b6356752.3142 扁率f1/298.2572236*//**…