今日の比較的単純な文字クラス
パッケージy2019.Algorithm.str.easy; 輸入java.util.HashMapを; 輸入java.util.Map; 輸入java.util.Stackを; / ** * @ClassName IsValidの * @description 20有効カッコ * * '(' ')'、 '{'、 '}'だけ文字を含む文字列が与えられると、 '['と']'、かどうかを決定入力された文字列は有効です。 * :*場合は入力文字列が有効である * *オープンブラケットは、ブラケットの同じ種類によって閉鎖されなければなりません。 *オープンブラケットが正しい順序で閉じなければなりません。 *空の文字列も有効と見なされることに注意してください。 * * @Author xiaof * @Date 2019年8月4日15:* / パブリック・ クラスのIsValid { パブリック ブールソリューション(文字列S){ 地図comMap = 新しい新しいHashMapの(); スタックのスタック = 新しい新しいスタック(); comMap.put( '('、 ')'); comMap.put( '[' 、 ']'); comMap.put( '{'、 '}' ); // 1トラバース列、取得各文字 CHAR CS [] = s.toCharArrayを() のための(int型 I; I = 0を; <cs.length ++ I){ // スタックがオンになっていない場合、それは、次に、スタックにプッシュされた場合([{文字、:2.か否かが判断される IF (comMap.containsKey(CS [I] )){ // キーが含まれている場合 stack.push(CS [I]); } 他{ IF(stack.size()<= 0 ){ リターン falseに; } // データスタックと現在のデータを分析3.、もしそうであれば、正確に一致しています[OK]を、そうでない場合は、falseに char型の TEMP =(CHAR )stack.pop(); IF((CHAR)comMap.get(TEMP)=!CS [I]){ // もし不均等な リターン をfalseに; } } } IF(stack.size()> 0 ){ 戻り 。偽 } を返す 真。 } パブリック 静的 ボイドメイン(文字列[]引数){ 文字列S = "()" 。 IsValidのののFuc = 新しいのIsValid(); fuc.solution(S); } }
パッケージy2019.Algorithm.str.medium; / ** * @ClassNameのCountSubstrings * @description 647回文サブストリング * *文字列を考えると、あなたのタスクは、この文字列でどのように多くの回文構造部分文字列を数えることです。 * *異なる開始インデックスまたは終了インデックスを持つストリングであっても、彼らは同じ文字で構成されて別の部分文字列としてカウントされます。 * *例1: * *入力: "ABC" *出力:3 *説明:三のパリンドローム文字列: "A"、 "B"、 "C"。 * * *例2: * *入力: "AAA" *出力:6 *解説:6つのパリンドローム文字列: "A"、 "A"、 " *統計の文字列が回文文字が含まれています * * @author xiaof * @ 2019年8月4日16時30日付 *の@Version 1.0 * * / パブリック クラスCountSubstrings { 公共 int型のソリューション(文字列S){ // 全ての文字列を介して二重ループ のint COUNT = 0 ; char型 []ソース= s.toCharArray () のために(int型 I = 0;私はsource.length <; ++ I){ ための(int型 J = I; J <source.length。++ J){ //すべての文字列を介して IF (isPalindromic(I、J、ソース)){ COUNT ++ ; } } } 戻りCOUNT; } / ** * * @paramのLインデックスを左 * @paramの右インデックスにR&LT * @paramの元のソース文字の文字の配列 * @return * / パブリック ブール isPalindromic (int型の L、INT R&LT、CHAR []ソース){ 一方(L <= R&LT){ IF(出典[L] ==ソース[R]){ ++リットル; - R。 } 他{ 戻り 偽。 } } 戻り 真。 } }
パッケージy2019.Algorithm.str.medium; 輸入java.util.HashMapを; 輸入java.util.Map; / ** * @ClassName LengthOfLongestSubstring * @description 3.最長サブストリングの文字を繰り返すことなく * *文字列を考えると、文字を繰り返すことなく、最長の部分文字列の長さを見つけます。 * *実施例1: * *入力: "abcabcbb" *出力:3 *説明:答えは3の長さと、 "ABC"である *例2: * *入力: "BBBBB" *出力:1つの *説明:答えは1の長さで、「B」である *例3: * *入力:「pwwkew」 出力*:3 *説明:答えで3の長さにして「WKE」、IS *答えの部分文字列でなければならず、「pwkeは」サブシーケンスとない部分文字列であることに注意してください。 * * @author xiaof * @date 2019 / 8月4日午前17時30分。 * @Version 1.0 * * / パブリック クラスLengthOfLongestSubstring { 公共 int型のソリューション(文字列S){ IF(S == NULL || s.equals( "" )){ 戻り 0 ; } // 統計最長の連続サブ、我々は文字だけのそれぞれを複製排除、およびそれにその位置から開始する必要があります intを = 0を起動し、COUNT = 1 ; 地図NUM = 新新 HashMapの(); ブール lastcountが= falseに; char型 []ソース= s.toCharArray(); num.put(出典[ 0]、0 ); のため(int型 I = 1; I <source.length; + + I){ // 文字列は上記を含むかどうかを決定し、そこに持っている(INT)num.get(ソースは[I ])> =開始、 および以上で、データの干渉を回避する前にスキップすることができず開始位置除外 IF(num.containsKey(出典[I])&&(INT)num.get(出典[I])> = スタート){ // そして、含まれている場合、繰り返し文字列は、以前に発生した、指示に統計波 COUNT = Math.max(COUNT、(I - スタート))。 開始(= INT )num.get(出典[I])+ 1。; num.put(出典[I]、I); } 他{ num.put(出典[I]、I); IF(I == source.length - 1。){ lastcount = trueに; } } } // 最後のサイクル、最後の位置が算出される IF (lastcount){ COUNT = Math.max(COUNT(source.length - スタート)); } 戻りCOUNT; } パブリック 静的 ボイドメイン(文字列[]引数){ 文字列s = "pwwkew" 。 文字列S1= "tmmzuxt" 。 文字列s2を = "abcabcbb" 。 fucをLengthOfLongestSubstring = 新しいLengthOfLongestSubstringを(); fuc.solution(S2)。 } }