まず、プログラミングとは『こう書けばいい』…というものではありません。簡単に言えば『現実世界のシミュレーション』です。(例外はあるにはあるが、ほぼこの考えで出来ている)
なので、C#でとか○○言語でとかみたいなものは置いといて、「現実世界でならどうするか」を考えてみましょう。
たとえば今回の場合、
[お願い]
単語をいくつか書いたメモを渡すから、そこに書かれている単語を次のように処理してその結果を俺に渡してくれ。ただし、処理の流れは「処理の流れ」の項目にある感じで頼む。
[例1]
abc, defg, b, stuv, ef
↓
vuts, fe, gfed, b, cba
[処理の流れ]
方法1:
単語を(降順で)並び替えてからそれぞれの単語を後ろから読む
方法2:
単語を後ろから読んでいき、最後に全体を(降順で)並び替える
的な依頼かなにかを先輩からなり親御さんからなり、ご兄弟からなりの知人とかから頼まれたとします。
さて、質問者さんはどのようにしますか?
私なら、とりあえず方法1からやります。
abc, defg, b, stuv, ef
とあったら、
stuv, ef, defg, b, abc
のように全体を降順で並び替える。
そして、それぞれ単語レベルで見ていき、stuvを後ろから読むと vuts となる。
なので一つ目はvuts
で、二つ目の単語はefですが、後ろから読むとfe
となる。
…これを最後まで繰り返すだけ。
つまり、疑似コードで書くと、
[方法1の現実世界での疑似コード]
1. 全体をソート(降順で)
2. 最初の単語から最後の単語まで一つ一つ見ていく
2.1. 現在フォーカスしている単語を後ろから読む
2.2. (2.1)で出来た単語をメモに記録する
というような感じになるはずです。言い回しとかは変えてもいいですが。
全体を文、単語レベルを単語と表現すると、文レベルでソートしてから単語を一つ一つ見ていき、それぞれ後ろから読む。
これだけです。
これを実装するだけです。
そして、方法2も同様にやってみる。
そうすると、abc, defg, b, stuv, ef
であれば、一つ目の単語abcを後ろから読む。するとcba
となる。さらに次の単語defgも後ろから読む。するとgfed
となる。
...これを最後まで繰り返すとcba, gfred, b, vuts, fe
となる。
そして最後に単語全体を降順でソートする。
これも疑似コードで書くと、
[方法2の現実世界での疑似コード]
1. 一つ目の単語から最後の単語まで一つ一つ見ていく
1.1. 現在の単語を後ろから読む
1.2. (1.1)をメモに記録する
2. 全体を降順でソートする
みたいになるはずです。
これを実装するだけです。
よって、
1. 方法1でやってみる
2. 方法2でもやってみる
のような流れになるはです。
ただ、『一つずつ単語を後ろから読む』処理は対象となるデータ( abcなのか stuvなのかとか) が違うだけで方法自体は同じですから、C#とかでいえばメソッドにすると楽かもしれません。
『方法1の現実世界での疑似コード』での(1)は単純にソートするだけです。降順で。
質問にあるコードでいえばtexts.OrderByDescending(x => x)
の部分か。
で、ソート済みになった状態で、(2)はfor文で出来ますね。
(2.1)は質問のヒントにもあるようにReverseメソッドを使えばいい。
(2.2)は単純に文字列の配列にすればいいだけ。
[追記1]
(本回答の登録が済んだ後に修正依頼のやつを読んだので追記します)
Reverse()メソッドを使っても出力結果がvuts,fe,gfed,b,cbaにならないのでわからなくなってしまいました。
そういう場合は調べてください。プログラマやSEは『考える事』と『調べる事』が仕事です。
高校までの学校の暗記物のように暗記するのではなく、調べるのが当たり前です。
『C# 文字列 逆順』とかで検索すると、ここのようなページがヒットします。
[修正]: ※ 上記では「調べるのが当たり前」と書いていますが、課題等を丸投げしてもいいとか基礎をないがしろにしていいという意味ではありません。(マジで勘違いしている人が多すぎる…… 考えてもいないのに、「30分でわからなければ聞け」というのを鵜呑みにして課題丸投げしているのが多い。「○分でわからなければば」の真意は『30分や1時間、自分なりに考えて調べてそれでも対応できない場合は聞くべき。自分にはない発想によるものだったりするから』です。勘違いしている人が多すぎる…)