gee*_*ran 1 .net c# string algorithm
最近我在讨论中被要求写一个算法来实现一个句子的单词的反转(不是整个句子的反转),而不使用除了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;
}
Run Code Online (Sandbox Code Playgroud)
存在是一个相对其使用LIFO堆栈优雅的解决方案.
然而问题听起来像家庭作业,所以我只提供伪代码.
currWord = new LIFO stack of characters
while (! end of string/array)
{
c = next character in string/array
if (c == some_white_space_character) {
while (currWord not empty) {
c2 = currWord.pop()
print(c2)
}
print(c)
}
else
currWord.push(c)
}
Run Code Online (Sandbox Code Playgroud)
这有点简单:
string inp = "hai how are you?";
StringBuilder strb = new StringBuilder();
List<char> charlist = new List<char>();
for (int c = 0; c < inp.Length; c++ )
{
if (inp[c] == ' ' || c == inp.Length - 1)
{
if (c == inp.Length - 1)
charlist.Add(inp[c]);
for (int i = charlist.Count - 1; i >= 0; i--)
strb.Append(charlist[i]);
strb.Append(' ');
charlist = new List<char>();
}
else
charlist.Add(inp[c]);
}
string output = strb.ToString();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15249 次 |
| 最近记录: |