タイトル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 ; } }; //は、のような文字列を横断し、その後、ハッシュテーブルを横断しないでください!!!