この問題を解決するために、文字列のハッシュテーブル

タイトル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は私= 0 ;
         のために(私は= 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 = MAX(ANSは、I-は左); 
            ハッシュ[S [I]]= I; 
        } 
        戻りANS。
    }

387タイトル 

最初の文字列ユニークなキャラクター

文字列を考えると、その最初の非反復文字を見つけると、そのインデックスを返します。ない場合は、-1を返します。

ケース:

s = "leetcode"

返回 0.

s = "loveleetcode",
返回 2.

题解:

 题解,使用hash表对字符出现的个数进行统计,之后再次遍历字符串查找hash表即可。注意出现次数问题的都可以用这个思路来求解!

// @lcコード=開始
クラスソリューション{
 パブリックINT firstUniqChar(ストリングS){
         int型 LEN = s.size()。
        int型の結果= 0 ;
        int型のハッシュマップ[ 256 ] = { 0 }。
        以下のためにINT iが= 0 ; I <LEN; I ++ 
        { 
            ハッシュマップ[S [I]] ++ ; 
        } 
        ためINT iが= 0 ; I <LEN; I ++ 
        { 
            もし(HashMapの[S [I]] == 1。 を返す私は、
        } 
        リターン - 。1 ; 

    } 
}; //は、のような文字列を横断し、その後、ハッシュテーブルを横断しないでください!

 

 

おすすめ

転載: www.cnblogs.com/SK1997/p/11964360.html