문자열 해시 테이블 문제를 해결하기 위해

제목 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. ; 

    } 
}; // 해시 테이블을 통과하지 않는, 다음과 같은 문자열을 통과! ! !

 

 

추천

출처www.cnblogs.com/SK1997/p/11964360.html