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#アルゴリズムで解決した面接の質問

ブログ    

推薦する

人工知能を活用した機械駆動型データ自動ラベル付け法

[[416242]]オブジェクト検出、オブジェクト認識、セグメンテーション タスク用の自動注釈ソリュ...

大規模マルチビューガウスモデル(LGM):5秒で高品質の3Dオブジェクトを生成、試用可能

メタバースにおける 3D クリエイティブ ツールの需要の高まりに対応するため、3 次元コンテンツ生成...

人間をより人間らしくし、機械に触覚を与えましょう!電子皮膚の専門家4人の最新の成果のレビュー

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

...

...

Suning製品セマンティックリコールにおけるDSSMテキストマッチングモデルの適用

【51CTO.comオリジナル記事】 1. 背景テキスト マッチングは、自然言語処理における中核的な...

ICLR 2022|スピードこそすべて!完全なバイナリ化 BiBERT による超圧縮

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

責任ある AI 導入: IT 共生の青写真

AI ツールが合法化され、職場に導入されるようになると、人々は当然、その使用例や AI ツールに依存...

...

Googleは視覚障害者の走行を支援するAIシステムをテストしている

[[353439]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...

モノのインターネット(IoT)がビジネスに活力を与える:5つのビジネス事例が示すもの

モノのインターネットはさまざまな分野に浸透しており、その魅力と需要は徐々に高まっています。このテクノ...

C#アルゴリズムのプログラム実装に関する面接の質問

C# アルゴリズムの面接の質問を解く方法はたくさんあります。ここでは 1 つだけ紹介します。まずは質...

EasyDLが新しくアップグレードされ、ERNIEの3つの機能によりエンタープライズレベルのNLPモデルを迅速にカスタマイズできるようになりました。

最近、百度文心は3つの主要機能をリリースし、カスタマイズされたマルチラベルテキスト分類、感情傾向分析...

北京の平昌冬季オリンピック閉会式にAIとモバイクの自転車シェアリングが8分間強制的に介入

「人工知能、ユニークだと思います」。2月24日、北京8分監督のチャン・イーモウ氏が公演のハイライトを...