C# アルゴリズムで実装された文字列反転の簡単な分析

C# アルゴリズムで実装された文字列反転の簡単な分析

C# を使用して文字列反転アルゴリズムを実装することに関する面接の質問を見てみましょう。

文字列反転の C# アルゴリズムの詳細は次のとおりです。

  1. ///<要約>  
  2. /// C# 文字列反転アルゴリズムを使用する 
  3. /// 例えば、入力は「12345」、出力は「54321」  
  4. /// 最適と思われるアルゴリズムを使用してください 
  5. ///</要約>  
  6. ///<param name="s">入力文字列</param>  
  7. ///<returns>出力文字列</returns>  
  8. 公共 静的 文字列Reverse(文字列str)
  9. {
  10.     
  11. }
  12. ///<要約>  
  13. /// C# 文字列反転アルゴリズムを使用する 
  14. /// 例えば、入力は「12345」、出力は「54321」  
  15. /// 最適と思われるアルゴリズムを使用してください 
  16. ///</要約>  
  17. ///<param name="s">入力文字列</param>  
  18. ///<returns>出力文字列</returns>  
  19. 公共 静的 文字列Reverse(文字列str)
  20. {
  21.  
  22. }

過去 2 週間で、多くのクラスメートの回答を見てきました。ここでは、皆さんのお役に立てればと思い、私自身の提案をいくつか紹介します。

C# アルゴリズムを使用して文字列の反転を実装する場合の一般的な問題:

1. 面接のアルゴリズムの質問では関数を書くのが常套手段なので、Main関数内で完結したり、受け取った文字列を逆順に出力したりするだけでは、関数的な思考が全くないと言え、基本的にアウトです。

たとえば、次のようになります。

  1. 静的  void Main(文字列[]引数)
  2. {
  3. Console.WriteLine( "文字列を入力してください!" );
  4.     文字列sString = Console.ReadLine();
  5.      ( int i = sString.Length - 1; i >= 0; i--)の場合
  6. {
  7. Console.Write(sString.Substring(i, 1));
  8. }
  9. コンソールの行を読み取ります。
  10. }
  11. 静的  void Main(文字列[]引数)
  12. {
  13. Console.WriteLine( "文字列を入力してください!" );
  14.     文字列sString = Console.ReadLine();
  15.      ( int i = sString.Length - 1; i >= 0; i--)の場合
  16. {
  17. Console.Write(sString.Substring(i, 1));
  18. }
  19. コンソールの行を読み取ります。
  20. }

2. 上記のように、多くの学生は入力と出力をメソッドで実行しますが、それでも機能的な思考が欠けています。最も単純な真実は、ほとんどの関数の機能は、上記のコードと同様に、パラメータを通じて結果を返すことです。他の開発者が Web アプリケーションでこの関数を呼び出し、結果がコンソールに出力された場合、その結果を誰が見ることができるでしょうか?また、出力ではなく、出力される文字列のみを言いました。これで出力できましたが、呼び出し元が自分で出力を制御したい場合はどうすればよいでしょうか? (メソッド内でテストをしたり、たまにLogに出力したりしているような場合は別ですが)面接でそのようなコードを書いてしまったら基本的には終わりです。

3. パラメータを確認します。これは最も重要ではありませんが、重要です。原則として、アルゴリズムに関する質問では、パラメータに関する必要なチェックがいくつか必要になります (テスターを面接する場合は、詳細を調べることがさらに重要になります)。また、例外をスローして、呼び出し元に例外の処理方法を決定させることができることに注意してください。

4. 一般的に、大企業の面接におけるアルゴリズムの質問では、ライブラリ関数の呼び出しを求められることはほとんどありません(デフォルト値)。 Array.Reverse() を呼び出すことでこの疑問が解決すれば、間違いなく終わりです。

最後に、この質問は実際に多くの人が犯しがちな間違いをテストします。これは C# の面接でも一般的なテストポイントです。String クラスと StringBuilder クラスの違いです。したがって、ループ内に文字列クラスのオブジェクトが重ね合わされるコードがある限り、基本的には終了です。

たとえば、次のようになります。

  1. 静的 文字列Reverse(文字列str)
  2. {
  3.     文字列strReturn = "" ;
  4.      foreach ( char c in str)
  5. {
  6. strReturn = c + strReturn;
  7. }
  8.      strReturnを返します
  9. }
  10. 静的 文字列Reverse(文字列str)
  11. {
  12.     文字列strReturn = "" ;
  13.      foreach ( char c in str)
  14. {
  15. strReturn = c + strReturn;
  16. }
  17.      strReturnを返します
  18. }

StringBuilder を使用する場合は、StringBuilder オブジェクトの構築時に初期容量を指定する必要があることに注意してください。指定しない場合、デフォルトの容量は 16 文字です。文字の追加によりデフォルトの容量を超えると、元のバッファの 2 倍のサイズの新しい文字列バッファが割り当てられます。

文字列の反転を実現する C# アルゴリズムの参照回答:

  1. 公共 静的 文字列Reverse(文字列str)
  2. {
  3.      if (文字列.IsNullOrEmpty(str))
  4. {
  5.         投げる 新しいArgumentException( "不正なパラメータ" );
  6. }
  7.     
  8. StringBuilder sb =新しいStringBuilder(str.Length);
  9.      for ( int index = str.Length - 1; index >= 0; index--)
  10. {
  11. sb.Append(str[インデックス]);
  12. }
  13.      sb.ToString()を返します
  14. }
  15. 公共 静的 文字列Reverse(文字列str)
  16. {
  17.      if (文字列.IsNullOrEmpty(str))
  18. {
  19.         投げる 新しいArgumentException( "不正なパラメータ" );
  20. }
  21.  
  22. StringBuilder sb =新しいStringBuilder(str.Length);
  23.      for ( int index = str.Length - 1; index >= 0; index--)
  24. {
  25. sb.Append(str[インデックス]);
  26. }
  27.      sb.ToString()を返します
  28. }

char 配列を使用する学生もいますが、これも可能だと思います。

  1. 公共 静的 文字列Reverse(文字列str)
  2. {
  3.      if (文字列.IsNullOrEmpty(str))
  4. {
  5.         投げる 新しいArgumentException( "不正なパラメータ" );
  6. }
  7.     
  8.      char [] 文字 = str.ToCharArray();
  9.      int開始 = 0;
  10.      int end = chars.Length - 1;
  11.      char tempChar;
  12.      (開始 < 終了)の間
  13. {
  14. tempChar = chars[開始];
  15. 文字[開始] = 文字[終了];
  16. chars[end] = tempChar;
  17. 開始++;
  18. 終わり - ;
  19. }
  20.     
  21.     文字列strResult = new  文字列(文字);
  22.     
  23.      strResultを返します
  24. }
  25. 公共 静的 文字列Reverse(文字列str)
  26. {
  27.      if (文字列.IsNullOrEmpty(str))
  28. {
  29.         投げる 新しいArgumentException( "不正なパラメータ" );
  30. }
  31.  
  32.      char [] 文字 = str.ToCharArray();
  33.      int開始 = 0;
  34.      int end = chars.Length - 1;
  35.      char tempChar;
  36.      (開始 < 終了)の間
  37. {
  38. tempChar = chars[開始];
  39. 文字[開始] = 文字[終了];
  40. chars[end] = tempChar;
  41. 開始++;
  42. 終わり - ;
  43. }
  44.  
  45.     文字列strResult = new  文字列(文字);
  46.  
  47.      strResultを返します
  48. }

これで、C# アルゴリズムが文字列反転を実装する方法の基本の紹介は終わりです。このテスト問題を通じて、C# 文字列反転アルゴリズムと C# アルゴリズムの使用法を理解していただければ幸いです。

<<:  大根畑の問題を解決する C# アルゴリズム

>>:  C#アルゴリズムで解決した面接の質問

ブログ    
ブログ    
ブログ    

推薦する

AIチャットボット、欲しいですか?

チャットボットが追加されると、顧客からの問い合わせに24時間対応できるようになるため、革命的な変化が...

AI導入における主な障壁とその解決策

COVID-19 パンデミックにより、企業はデジタル変革の取り組みを数か月、場合によっては数年も加速...

...

...

ICML 2022の審査結果は「包囲」された、ヤン・ルカン:3つの論文を提出したが、3つとも却下された

ちょうど今、チューリング賞受賞者のヤン・ルカン氏がツイッターにメッセージを投稿した。「3本の論文を提...

電力業界における人工知能開発の現状

今日は、人類が初めて電気を家庭や企業に供給するようになってから 140 年目の記念日です。電力産業は...

製造バリューチェーンにおいて RPA に真のチャンスはあるのでしょうか?

製造業における自動化の推進力は非常に単純です。自動化は人間の作業をシミュレートするため、人間は製造バ...

世界初!人間の脳のようなスーパーコンピュータ「シェナン」がまもなく発売され、ムーアの法則を破り、エネルギー消費を数桁削減する

人間の脳は地球上で最も効率的な計算装置です。わずか 20W の電力と 1.3kg の質量で、1 秒間...

人工知能は患者と医療業界の両方にどのような利益をもたらすのでしょうか?

人工知能は医療業界のシステムと方法を変えています。半世紀以上にわたり、人工知能とヘルスケアは一緒に発...

市場規模は100億元を超える可能性あり。これら4種類の医療用ロボットをご存知ですか?

2020年、突然の公衆衛生事件により、医療用ロボットに大きな注目が集まりました。医療用ロボットは、...

ディープラーニングを専門家以外の人に説明するにはどうすればよいでしょうか?

昨年から、AIの普及に関わる仕事がたくさん必要になりました。私は長い間、ディープラーニングがなぜ特に...

...

人工知能の時代において、自己成長と教育においてどのような取り組みがなされるべきでしょうか?

近年、私たちは時代の広大さと大きな変化を痛感しています。潮流の下では、個人は泥や砂のように小さく、そ...

インターネットの後半、人工知能の春は始まったばかり

最近、インターネット企業における「人員最適化」問題が友人の間で話題になっており、多くの人がパニックに...

...