(簡単には)回文を作ることができます - LeetCodeコンテスト(進行中)

説明:

文字列を考えると  s、我々はの部分文字列にクエリを作ります  s

各クエリのために  queries[i] = [left, right, k]、我々は、部分文字列を並べ替えることがあり  s[left], ..., s[right]、その後まで選択  k 任意の小文字の英文字で置き換えるためにそれらの。 

部分文字列は、上記の操作後の回文の文字列であることが可能である場合は、クエリの結果があります  trueそうでなければ、結果はあります  false

アレイ返す  answer[]、  answer[i] の結果である  i番目のクエリを  queries[i]

なお:各文字はので、もし例えば交換のために個別にカウントされ  s[left..right] = "aaa"、そして  k = 2、我々は文字だけの2を置き換えることができます。(また、初期文字列があることに注意してください  s 任意のクエリによって変更されることはありません。)

 

例:

入力:S = "ABCDA"、クエリ= [3,3,0]、[1,2,0]、[0,3,1]、[0,3,2]、[0,4,1] ] 
出力:[真、偽、偽、真、真] 
説明:
クエリ[0]:サブ= "d"は、palidromeです。
クエリは、[1]:サブ= "BC"、palidromeされていません。
クエリは、[2]:サブ= "ABCD"、唯一の1文字を交換した後palidromeされていません。
クエリ[3]:サブストリング=「ABCD」は、palidromeある「アバ」に変更することができます。また、これは最初の「AB」と「CD」を置き換え、その後「BACD」それを再配置「BAAB」に変更することができます。
クエリ[4]:サブストリング= "ABCDA"は、palidromeある"ABCBA"に変更することができます。

 

制約:

  • 1 <= s.length, queries.length <= 10^5
  • 0 <= queries[i][0] <= queries[i][1] < s.length
  • 0 <= queries[i][2] <= s.length
  • s 小文字のみ英語の文字が含まれています。

 

溶液:

Attempt1:

一つのテストケースの失敗、タイムアウト例外:

 

 

 

 

クラスソリューション{
     パブリックリスト<ブール> canMakePaliQueries(文字列s、int型[] []クエリー){ 
        
        場合(クエリ== NULL || S ==のヌル || s.length()== 0 || queries.length == 0 ||クエリ[0] .LENGTH == 0 ){
             戻り ヌル
        } 
        
        リスト <ブール>リスト= 新しいのArrayList <ブール> (); 
        
        以下のためにint型、iはqueries.lengthを<; I = 0 iは++ ){ 
            
            文字列TMP = "" ; 
           
                int型 ST =クエリ[I] [0 ];
                INT EN =クエリ[I] [1];
                int型 K =クエリ[I] [2 ]。
                
                ブーリアンテスト= isPalindrome2(s.substring(ST、EN + 1 )、K); 
            
                list.add(テスト)。
            
            
        } 
        
        戻りリスト。
        
    } 
    
    / * 
    パブリックブールisPalindrome(文字列s、int型K){ 
        
        INT = 0始めます。
        INT端= s.length() - 1; 
        INT回= 0; 
        一方、{(<終わりを始める)
            場合(s.charAtは(開始)= s.charAt(エンド)!){ 
                IF(回<K){ 
                    回=回+ 1。
                } 
                他{ 
                    falseを返します。
                }
            }
            ++始めます。
            終わり - ; 
        } 
        trueを返します。
    } 
    * / 
    
    パブリック ブール isPalindrome2(文字列s、int型K){ 
        
        int型のカウント= 0 ; 
        
       HashMapの <文字、整数>マップ= 新しい HashMapの<> (); 

        
        以下のためにint型私= 0; i)が(s.lengthを<;私は++ ){ 
            
            場合(!{map.containsKey(s.charAt(I)))
                
                int型の TMP = カウント(S、s.charAt(I)); 
                
                もし(TMP%2!= 0 ){ 
                    map.put(s.charAt(I)、TMP)。 
        }
                }
            }
            
        
       System.out.println(S + " "+ s.length()+"" + map.size())。
    
        もし(s.length()%2 == 0 ){ 
            
            場合(map.size()/ 2 <= K)
                 を返す 
            
        } 
        { 
            
            場合(map.size()/ 2-1 < K){
                 戻り 
            } 
        } 
        
       
       を返す 
        
    } 
    
    公共 int型の数(文字列s チャーA){
         int型のカウント= 0 ; 
        以下のためにint型I = 0; i)は(s.lengthを<; 私は++ ){
             場合(s.charAt(I)== A){ 
                カウント ++ 
            } 
        } 
        リターン回数、
    } 
}

 

おすすめ

転載: www.cnblogs.com/codingyangmao/p/11441909.html