[アルゴリズム]文字列の反転
9697 ワード
質問する
0と1のみからなる文字列を指定すると、その文字列のすべての数字を同じにしたいと思います.文字列の中で1つ以上の連続した数字を捕まえてすべて反転することができます.反転は1を0に、0を1にすることを意味します.
例えば、S=0001100の場合、
全体的にひっくり返すと1110011です.
4文字目から5文字目を反転すると111111になり、2文字目ですべて同じ数字になります.
ただし、最初から4文字目から5文字目に文字を反転させると、1回に1億円に変換でき、1回目ですべて同じ数字に変換できます.
指定した文字列をすべて0またはすべて1に等しくする最小回数を返します.
ひっくり返す回数を数えるなら?
前と後が違う文字の場合を逆さまに考えたとき.はいずれも0 前文字が すべてを1に変換 前文字が 最初の字をひっくり返すなら?はいずれも0
最初の字が なら.👉🏻 0に反転する回数+=1 すべてを1に変換👉🏻 1に反転した回数+=1 頭文字 最高回数を獲得するには?
合計
n/a.計画はすべて0または1であり、反転回数を格納するスペースを作成します. 0に反転した回数=>countToAllZero 1に反転した回数=>countToAllOne 最初の文字が0のはcountToAllOne、1のはcountToAllZeroプラス+1 入力文字列 を返します.現在の文字列と直後の次の文字列が異なる場合、反転周波数に+1を加算 の次のシーケンスの文字列は0です.👉🏻 countToAllOne += 1 の次のシーケンスの文字列は1です.👉🏻 countToAllZero += 1 countToAllOneとcountToAllZeroは、より小さな値 を返します.
0と1のみからなる文字列を指定すると、その文字列のすべての数字を同じにしたいと思います.文字列の中で1つ以上の連続した数字を捕まえてすべて反転することができます.反転は1を0に、0を1にすることを意味します.
例えば、S=0001100の場合、
全体的にひっくり返すと1110011です.
4文字目から5文字目を反転すると111111になり、2文字目ですべて同じ数字になります.
ただし、最初から4文字目から5文字目に文字を反転させると、1回に1億円に変換でき、1回目ですべて同じ数字に変換できます.
指定した文字列をすべて0またはすべて1に等しくする最小回数を返します.
0001100
理解するひっくり返す回数を数えるなら?
前と後が違う文字の場合を逆さまに考えたとき.
0001100
この文字列の中で、3番目の数字は0
で、4番目の数字は1
なので、今はひっくり返る時だと思います.👉🏻 count += 10
後文字が1
の場合👉🏻 0に反転する回数+=11
後文字が0
の場合👉🏻 1に反転する回数+=1最初の字が
1
合計
0
または0
の場合の反転回数は、より小さい数で返されます.1
の使用n/a.計画
function findCountToTurnOutToAllZeroOrAllOne(string) {
const numbers = string.split('');
let countToAllOne = 0;
let countToAllZero = 0;
const addCount = (string) => {
const method = {
'0' : () => countToAllOne += 1,
'1' : () => countToAllZero += 1,
}
method[string]();
}
addCount(numbers[0]);
numbers.forEach((number, index) => {
const nextNumber = numbers[index + 1];
if(!nextNumber) {
return;
}
if(number !== nextNumber) {
addCount(nextNumber);
}
});
return Math.min(countToAllOne, countToAllZero);
}
パイinput = "011110"
def find_count_to_turn_out_to_all_zero_or_all_one(string):
count_to_all_zero = 0
count_to_all_one = 0
if string[0] == '0':
count_to_all_one += 1
elif string[0] == '1':
count_to_all_zero += 1
for i in range(len(string) - 1):
if string[i] != string[i + 1]:
if string[i + 1] == '0':
count_to_all_one += 1
if string[i + 1] == '1':
count_to_all_zero += 1
return min(count_to_all_one, count_to_all_zero)
result = find_count_to_turn_out_to_all_zero_or_all_one(input)
print(result)
Reference
この問題について([アルゴリズム]文字列の反転), 我々は、より多くの情報をここで見つけました https://velog.io/@yhe228/알고리즘-문자열-뒤집기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol