滑動關機代碼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.pswp.cn/news/538681.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538681.shtml
英文地址,請注明出處:http://en.pswp.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*//**…