ディレクトリ:文字列
第二に、配列
文字列(スライディングウィンドウ、キャラクターの動き)
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--])。
第二に、配列