一緒に創造し、成長するために一緒に働きましょう!「ナゲッツデイリー新プラン・8月アップデートチャレンジ」参加17日目、イベント詳細はこちら
恋に落ちる人もいれば、海を見に夜ドライブする人もいるリートコードの最初の疑問が解けない
最長共通プレフィックス
文字列の配列で最も長い一般的なプレフィックスを見つける関数を作成します。
共通のプレフィックスが存在しない場合は、空の文字列を返します ""
。
例 1:
输入:strs = ["flower","flow","flight"]
出力: "fl"
例 2:
入力: strs = ["犬","レースカー","車"]
出力: ""
説明: 入力に共通の接頭部がありません。
問題解決のアイデア
最長の共通プレフィックスは、すべての文字列の最短のもの以下でなければならないためです。したがって、最初の文字列をベンチマークとして使用し、残りの文字列を連続的に逆方向にスキャンし、スキャン プロセス中に最長の共通プレフィックスを継続的に更新できます。
トリックはありません、ブルートフォースは二重ループを使用し、外側は最初の文字列strs[0]
の各文字をループstrs[0]
し、現在の文字を取得し、内側のループ配列strs
は各項目の文字と比較し、配列の各項目の文字列を比較します現在の文字が同じ場合は共通の接頭辞を追加し、違いがある場合はループから飛び出して共通の接頭辞を返します
具体的な手順は次のとおりです。
-
ステップ 1: 共通プレフィックス
res
を定義して空に初期化し、次にフラグを定義しnext
て true に初期化し、それが共通プレフィックスであるかどうかを判断する -
ステップ 2: 外側のループ
strs[0]
、それをベンチマークとして使用して、現在のベンチマークの特性を取得しますstrs[0][i]
-
3 番目のステップ: 内側のループ
strs
、配列の現在の項目を取得するstrs[j]
-
ステップ 4: ベンチマークの現在の文字
strs[0][i]
を配列内の他の項目の現在の文字と比較しstrs[j][i]
ます. 同じ場合は外側のループにプレフィックスを追加しますres+=strs[0][i]
.しかし、同じでない場合は next を false に設定して飛び出します.この時、外側のループが判断 next が false ならループ外にも飛び出す -
ステップ 5: 戻る
res
var longestCommonPrefix = function(strs) {
let res = ''
let next = true
if(strs.length === 0) return res
for(let i = 0;i<strs[0].length;i++){
for(let j = 1;j<strs.length;j++){
if(strs[0][i] !== strs[j][i]){
next = false
break
}
}
if(next){
res+=strs[0][i]
}else{
break
}
}
return res
};
复制代码
知識ポイント
for ループ内
-
break
ループが継続しないように、ループを終了するために使用されます -
continue
ループをスキップしてループダウンを続けるために使用 -
return只能出现在函数里
上の例の for ループに現れるとエラーになります. 関数内の return の関数は, 下に内容がまだ残っていても実行を継続しないというものです. 最も一般的なのはパラメータが関数の要件を満たしています。要件を満たさない場合、実行は続行されません。