プログラマーの皆さん!元気でいることを願っています。 LeetCode-75 シリーズのソリューションを共有できることを嬉しく思います。このシリーズでは、コーディング面接の準備に役立つ 75 の重要な問題が取り上げられています。
各投稿では、私のアプローチの詳細な説明とともに、私の解決策を紹介します。ご質問や改善のための提案がございましたら、お気軽にコメントに残してください。あなたと協力し、議論できることを楽しみにしています!コーディングを楽しんでください!
問題のリンクをここに追加しました: 文字列を交互に結合
2 つの文字列 word1 と word2 が与えられています。 word1 から始めて交互に文字を追加して、文字列を結合します。ある文字列が他の文字列より長い場合は、マージされた文字列の末尾に追加の文字を追加します。
マージされた文字列を返します。
入力: word1 = "abc"、word2 = "pqr"
出力: "apbqcr"
説明: マージされた文字列は次のようにマージされます:
word1: a b c
word2: p q r
マージ: a p b q c r
入力: word1 = "ab"、word2 = "pqrs"
出力: "apbqrs"
説明: word2 が長いため、最後に「rs」が追加されることに注意してください。
word1: a b
word2: p q r s
マージ: a p b q r s
入力: word1 = "abcd"、word2 = "pq"
出力: "apbqcd"
説明: word1 が長いため、最後に「cd」が追加されることに注意してください。
word1: a b c d
word2: p q
マージ: a p b q c d
2 つの文字列が与えられた場合、各文字列の文字を交互に並べて結合する必要があります。両方の文字列の長さが同じであれば、解決策は簡単ですが、異なる長さを持つこともできます。ポインターを使用して両方の文字列を反復処理し、両方のポインターが最後に到達するまで結果に文字を追加します。
時間計算量:
時間計算量は O(n) です。n は、文字列を反復処理するときの長い文字列の長さです。
空間の複雑さ:
StringBuilder といくつかの変数を使用するため、時間計算量は 0(1) です。
public String mergeAlternately (String word1, String word2) { // ? Create a StringBuilder to build the result string efficiently StringBuilder completeWord = new StringBuilder(); // ? Initialize two pointers to traverse both strings int p1 = 0; int p2 = 0; // ? Iterate through both strings until both pointers reach the end of their resépectives strings while (p1 < word1.length() || p2 < word2.length()) { // ? Append the current character from words if the pointer is within bounds if (p1 < word1.length()) completeWord.append(word1.charAt(p1)); if (p2 < word2.length()) completeWord.append(word2.charAt(p2)); p1++; p2++; } // ? Convert the StringBuilder to a string and return it return completeWord.toString(); }
以上が文字列を交互に結合するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。