からのアルゴリズムブラシ

ディレクトリ:文字列

   第二に、配列

 

 

文字列(スライディングウィンドウ、キャラクターの動き)

1は、ソー​​トする0-1文字列(文字列のみ0と1が含まれている)に、あなたは、任意の2つの場所を交換し、交換の最小数を尋ねたことができますか?

// ソリューション:入れ替える前1と0の後ろに速い放電アイデアが必要とされ、カウント数; O(LEN)複雑; 
 int型の答え= 0 ;    
  のためにint型 I = 0、Jは= LEN - 1 ;私はJを< ; I ++、 - J){
     ((私は<&&([I] == 'J)を0 '); ++ I)
     のために((J> I)&&([J] == ' 1 '); - J)、
     IF(Iは、Jを<)++ 答え; 
}

図2に示すように、(1)すべてのAの文字列を削除する、(2)及び全てのBをコピーする。ザ 注意:十分な大きさの文字配列を

INT、N = 0、麻痺= 0 以下のためにint型 I = 0 ; S [I]; ++ I){
     もし、(S [I] =!'A'){ 
        S [N ++] =のS [i]は、
    } 
    もし、(S [I] == 'B'){
         ++ 麻痺。
    } 
} 
S [N] = 0 ;    
    

INT newLength = N + 無感覚。 S [newLength] = 0 ; 以下のためにint型 I = newLength - 1、J = N - 1 ; J> =0 ; - J){ S [I - ] =のS [J]。 もし(S [j] == 'B'){ S [I - ] = 'B'; } }

3、*のみと数字を含む文字列、それがアスタリスクの頭を解放します

// シーケンス液を保持:前方、すべて左からすべての数字、すべての残り*; 
    int型 J = N - 1。;
     のためint型 I = N - 1。 ; I> = 0 ; - I) 
             IF(isdigit(S [I]))S [J、] = S [I]、
     のために(; J> = 0 ; --j)S [J] = '* ';
 // 順序保存しない溶液:から*それはスタートが、それは*高速と低速フロント、二つのポインタ、と互換であるかどうかを判定し、注文番号を破壊する; 
    のためint型 I = 0、J = 0 ; J <N-; ++ J) 
         IF(S [J] == '*')スワップ(S [I ++]、S [J])。

図4に示すように、所与の二つの文字列bは、bはサブストリングのアナグラムかどうかを尋ねました。そのような入力A =こんにちは、B = LELとして、LLE、elloは真が、bは= ELO偽です。

// 解決方法:各単語Bの統計の数は、その後長さの領域Bを選択し、シーケンス番号が確認に等しく; 
int型の非ゼロ= 0 ;
 のためint型 I = 0 ; ++; IはLENBを< I ) 
     IF(NUM ++ [B [I] - [A '] == 1  ++ ゼロでない;
 のためにINT I = LENB;私はレナを<; ++ I){
     int型 C = A [I - LENB] - 'A';
     ++ NUM [C];
     IF(NUM [C] == 1  ++ 非ゼロ、
     他の IF(NUM [C] == 0  -ゼロでありません。
    C= [I] - [A ';
    - NUM [C]。
    もし(NUM [C] == 0  - ゼロでありません。
    そう であれば(NUM [C] == - 1  ++ ゼロでありません。
    もし(ゼロ以外== 0 を返す 
}

5、文章中の単語のすべてを反転、言葉は変わりません。たとえば、私は、学生が私は学生Aとなっています...。

// Q&A:フリップは、各単語が私は学生Aになった場合m'Iは、再び反転.tnedutsに直接になり、そのため、スペース;.を探している 
小面積は逆に:しばらく(私はJを<)スワップ(S [iが++]、S- [j--])。

 

第二に、配列

 

おすすめ

転載: www.cnblogs.com/huasky/p/11184328.html