滑动关机代码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;…

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日 考试班级 … ……学 号 …

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

节税可以帮助大家合理的降低税收支出&#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…

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

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

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…

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;我们会在没有购买这类商业建模软件的环境下…

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

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

python的基本语术_一起学python-彻底掌握专业术语“变量”的概念

昨天分享了笨方法学习编程&#xff0c;今天就让我们通过实战来接触python&#xff0c;掌握专业术语“变量”的概念吧 python 中的变量的基本概念和初中代数的方程式X的概念是一样的&#xff0c;只是在计算机程序当中这个X不仅仅可以代表一个数字&#xff0c;还可以代表一段文字…

lamp自动部署工具_Linux一键配置工具ezhttp介绍

简介&#xff1a; ezhttp是一个Linux一键配置工具&#xff0c;采用bash脚本语言编写。支持自动配置LAMP,LNMP,LNAMP环境&#xff0c;以前提供各种其它的配置工具&#xff0c;如自动配置swap,配置iptables等。项目托管在github&#xff0c;地址为https://github.com/centos-bz/e…

git设置全局账号密码_jenkins2.222使用之二、总体设置

构建前提&#xff1a;由于构建的时候是基于maven、git(码云)以及jdk1.8来的&#xff0c;所以这些都需要和jenkins安装在同一台服务器上面。全局工具配置&#xff1a;1、配置jdk系统管理-全局工具配置-jdk&#xff0c;配置如下:jdk版本可以配置多个&#xff0c;构建的时候&#…

Mybatis源码之(TypeAliasRegistry)TypeAlias别名实现机制

原文链接&#xff1a;http://blog.csdn.net/qq924862077/article/details/52612589 ---------------------------------- 在Mybatis编程中我们经常会用到将某个bean作为参数类型parameterType或者结果返回值类型ResultType&#xff0c;所以很多时候我们需要把完成的Bean的包名…

Java中Synchronized的用法

2019独角兽企业重金招聘Python工程师标准>>> 《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现&#xff0c;这是多线程学习必须了解的基础。本文将接着讲一下Java线程同步中的一个重要的概念…

concat特征融合_MSFNet:多重空间融合网络进行实时语义分割(北航和旷视联合提出)...

作者&#xff1a;Tom HardyDate&#xff1a;2020-02-01来源&#xff1a;MSFNet:多重空间融合网络进行实时语义分割&#xff08;北航和旷视联合提出&#xff09;原文链接&#xff1a;https://arxiv.org/abs/1911.07217主要内容实时语义分割是一项具有挑战性的任务&#xff0c;因…

wifi信号手机测试软件,专业的WiFi检测工具有哪些?如何解决wifi信号不好?

原标题&#xff1a;专业的WiFi检测工具有哪些&#xff1f;如何解决wifi信号不好&#xff1f;有朋友wifi测试软件有哪些&#xff1f;WiFi信号和声音一样&#xff0c;强弱都是可以测量的&#xff0c;检测WiFi的方法有很多&#xff0c;作为普通的家庭用户&#xff0c;我们有时需要…

python创建数组与列表_python基础(三):数组和列表

下面是小凰凰的简介&#xff0c;看下吧&#xff01; &#x1f497;人生态度&#xff1a;珍惜时间&#xff0c;渴望学习&#xff0c;热爱音乐&#xff0c;把握命运&#xff0c;享受生活 &#x1f497;学习技能&#xff1a;网络 -> 云计算运维 -> python全栈( 当前正在学习…