제목 5 : 긴 문자 문자열의 반복 없음
문자열을 감안할 때, 당신은 반복 문자를 포함하지 않는 찾을 가장 긴 문자열의 길이를.
예 1 :
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其
长度为 3。
예 2 :
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"
,所以其长度为 1。
예 3 :
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke"
,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke"
是一个子序列,不是子串。
方法一:
@ 아이디어 : 제어 영역의 모든 요소를 결정하기 위해 해시 테이블을 이용하여, 반복하지 않는다. 각 반복 비우는 // 해시 테이블 클래스 해결 { 공개 : INT lengthOfLongestSubstring ( 문자열 S)를 { INT LEN = s.size (); INT HashMap의 [ 256 ] = { 0 } INT 플래그 =에서는 0 ; INT 전류 = 0 ; INT 결과 = 현재, INT는 I가 = 0 ; 위해 (I는 = 0 ; I <LEN; I ++ ) { IF를(HashMap의 [S [I]! = 0 ) { // 이 서브 스트링 복제 전류 = I- 에서 플래그; IF (결과 < 전류) 결과 = 현재; // 해시 테이블 클리어 를 들어 (;에 플래그 <I]에서 플래그 ++ ) { IF (S [에서 플래그 =! S [I]) 의 HashMap [S [에서 플래그] = 0 ; 다른 BREAK ] } 의 HashMap [S [I] = 1이다. ] 에서 플래그++ ; } 다른 { HashMap의 [S [I] = 1이다. ] // 0으로 설정 } } // 겹치지 않게하는 방법. I- = 전류 에서 플래그; IF (결과 < 전류) 결과 = 전류, 리턴 결과; } };
방법 2 :
// 방법 2 : 슬라이딩 윈도우 내 접근 방식을 진행한다. 마지막 문자열의 위치를 저장하는 해시 테이블을 사용하여 표시 INT lengthOfLongestSubstring ( 문자열 S) { 벡터 < INT (> 해시 256 , - . 1 ) INT는 = 왼쪽 - 1. , INT ANS = 0 ; 에 대한 ( INT I = 0 ; I <s.size (); ++ I) { IF (해쉬 [S [I]]> 좌) { 좌측 = 해쉬 [S [I]; } ANS = 최대 (ANS는 I-가 왼쪽) 해쉬 [S [I]= I; } 반환 ANS를; }
(387) 표제
첫 번째 문자열 고유 문자
문자열을 감안할 때, 첫 번째 반복되지 않는 문자를 발견하고 그 인덱스를 반환합니다. 그렇지 않은 경우는 -1을 돌려줍니다.
케이스 :
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
题解:
题解,使用hash表对字符出现的个数进行统计,之后再次遍历字符串查找hash表即可。注意出现次数问题的都可以用这个思路来求解!
// @lc 코드 = 시작 클래스 솔루션 { 공개 : INT firstUniqChar ( 문자열 들) { INT 렌 = s.size (); INT 결과 = 0 ; INT의 해시 맵 [ 256 ] = { 0 }; 위한 ( INT 난 = 0 ; I <LEN; I ++ ) { 해시 맵 [S [I] ++ ; } 에 대해 ( INT 난 = 0 ; I <LEN; I ++ ) { 만약(HashMap의 [S [I]] == . 1 ) 반환 I를; } 수익을 - 1. ; } }; // 해시 테이블을 통과하지 않는, 다음과 같은 문자열을 통과! ! !