Baidu、Ali、Tencent、JDなどのインタビューアルゴリズムの質問。

今日は、文字列関連のアルゴリズムインタビューの質問をあなたと共有します。大きな工場に入ると、アルゴリズムの面接の質問がありますが、アルゴリズムとデータ構造には特定のしきい値があるため、このしきい値を超えてゆっくりと蓄積し、何度も何度も確認することは実行可能な戦略です。


この質問は、Leetcodeの151番目の質問です。文字列内の単語を逆にします。
画像

 

この問題を解決するアイデア:

  • 文字列内の無駄なスペースをクリアし、【「   are you ok  」を「are you ok”】に整理する

  • 次に、処理された文字列を逆にして、[「areyouok」を「kouoyera」に整理します]

  • 各単語を個別に反転し、[koをokに、uoyをあなたに、eraをareに変更します]

  • 最終結果は「OKyouare」です  

             1.スペースを空ける

             2.弦全体が逆になります

             3.次に各単語を反転します

 

目標1.文字列内の無駄なスペースを排除する swift 输入:s = " are you ok "

 输出:"are you ok" 要件:役に立たないスペースには、最初、中間、および最後の位置のスペースが含まれます

画像    

アイデア: 

        1.文字列配列をトラバースし、そうでない         場合" "は配列に追加します
2.そうである場合は" "、空であるかどうかを判断し、空である場合はスキップし、そうでない場合" "は配列に追加します[2つの単語の間に複数のスペースがある場合がありますが、処理後は1つのスペースしか表示できないため、前にそれも空であるかどうかを判断する必要があります ]

 func clearSpace(str: String) -> [Character] {
        var chars = [Character]()
        var space = true
        for c in str {
            if c != " " {
                chars += "\(c)"
                space = false
            } else if space == false {
                chars += " "
                space = true
            }
        }
        return chars
    }

 

コード内のスペース の機能は、[アイデア2]の判断ロジックを実現することです。使用するだけです

s = "  are   you ok "

例としてコードを見てみましょう。

  • 開始は " "ですので、何もせず、「a」に移動するまで実行を続けます

  • c = aであるため、chars配列に追加され、スペースはfalseとしてマークされます(このマークの意味は次のとおりです。rに移動すると、最後のスペースは最後のスペースではないことがわかります。スペースの値= false)。'e'へのトラバーサルまで実行を続行します

  • 次に、c = " "ですが、スペース= falseであるため、chars + =の " "場合、スペースはtrueとしてマークされます。実行を続行します。この時点で、c =  " "、コードによると、操作は実行されません。c = yになるまで実行を続け、最初のステップに戻ります。

 

ここでより重要な点は、スペースの 初期値が真であるということです。

以下は、javaの実装コードです。

public String clearSpace(String s) {
      if (s == null) return "";
        char[] chars = s.toCharArray();
    boolean space = true;
    for (int i = 0; i < chars.length; i++) {
        if (chars[i] != ' ') { // chars[i]是非空格字符
            chars[cur++] = chars[i];
            space = false;
        } else if (space == false) { // chars[i]是空格字符,chars[i - 1]是非空格字符
            chars[cur++] = ' ';
            space = true;
        }
    }
}

 

目標2.フリップ

これは非常に簡単で、コードは次のとおりです。

func reverseString(_ chars: inout [Character], _ l: inout Int, _ r: inout Int) {
        r -= 1
        while l < r {
            let c = chars[l]
            chars[l] = chars[r]
            chars[r] = c
            l += 1
        }
    }

このコードの意味は、["are youok"を "ko uoyera"に整理することです]

 

全体的な実現:

class Solution {
    func reverseWords(_ s: String) -> String {
        var chars = [Character]()
        var space = true 
        for c in s {
            if c != " " {
                chars += "\(c)"
                space = false 
            } else if space == false {
                chars += " " 
                space = true 
            }
        }
        if space == true {
            chars.removeLast()
        }
        let count = chars.count
        reverseString(&chars, 0, count)
        var preIdx = -1
        for i in 0..<count {
            if chars[i] == " " {
                reverseString(&chars, preIdx+1, i)
                preIdx = i 
            }
        }
        reverseString(&chars, preIdx+1, count)
        var str = ""
        for c in chars {
            str += "\(c)"
        }
        return str
    }

    func reverseString(_ chars: inout [Character], _ l: Int, _ r: Int) {
        var b = l 
        var e = r - 1
        while b < e {
            let c = chars[b]
            chars[b] = chars[e]
            chars[e] = c
            b += 1
            e -= 1
        }
    }
}

 

総括する:

私が今日学んだ問題解決のアイデアは、アルゴリズムの問​​題をサブ問題に分解し、サブ問題を処理した後に組み立てることで、問題を解決できるというものです。面接に合格したい場合でも、質問をして、いくつかの問題の解決策を蓄積する必要があります。さて、私はあなた方全員を助けることを望んで、今日あなた方と多くを共有します。

[The Way of Infinite Testing]パブリックアカウントへの注目、[リソースの受信]への返信、
Pythonプログラミング学習リソースの乾物、
Python + AppiumフレームワークAPPUI自動化、
Python + Seleniumフレームワーク
WebUI自動化、Python + UnittestフレームワークAPIへようこそオートメーション、

リソースとコードは無料で送信されます〜
記事の下部に公式アカウントのQRコードがあります。WeChatでスキャンしてフォローするだけです。

備考:私の個人公開アカウントが正式に開設され、ビッグデータテスト、機能テスト、テスト開発、APIインターフェイスの自動化、テストの運用と保守、UI自動化テストなどのテストテクノロジーの共有に専念しています。WeChat検索パブリックアカウント:「WuliangThe Way of Testing」、または以下のQRコードをスキャンしてください。

 注意を向けて、一緒に成長しましょう!

 

おすすめ

転載: blog.csdn.net/weixin_41754309/article/details/113093783