最近、ToCharArrayとLengthを除いて、Split / Replace / Reverse / Joinなどの文字列操作を使用せずに、文の単語の逆(文全体の逆ではない)を実装するアルゴリズムを作成するように求められました。以下は私が5分の時間で考案できるものです。アルゴリズムは正常に機能していますが、実装のスタイルは少し醜いようです。コードを磨くことで、誰かが私を助けてくれますか?
string ReverseWords(string s)
{
string reverseString = string.Empty;
string word = string.Empty;
var chars = s.ToCharArray();
List<ArrayList> words = new List<ArrayList>();
ArrayList addedChars = new ArrayList();
Char[] reversedChars = new Char[chars.Length];
int i = 1;
foreach (char c in chars)
{
if (c != ' ')
{
addedChars.Add(c);
}
else
{
words.Add(new ArrayList(addedChars));
addedChars.Clear();
}
if (i == s.Length)
{
words.Add(new ArrayList(addedChars));
addedChars.Clear();
}
i++;
}
foreach (ArrayList a in words)
{
for (int counter = a.Count - 1; counter >= 0; counter--)
{
reverseString += a[counter];
}
if(reverseString.Length < s.Length)
reverseString += " ";
}
return reverseString;
}