[Fact]
public void WordsReverse()
{
StringBuilder str =new StringBuilder ( "Hello world!");
var cStack = new Stack<char>();
for (int i = 0, w = 0; i < str.Length; i++)
{
if (str[i] == ''||i==str.Length-1)
{
while (cStack.Count > 0)
{
str[w] = cStack.Pop();
w++;
}
w = i + 1;
}
else
{
cStack.Push(str[i]);
}
}
Console.WriteLine(str);
}
我的算法中没有分配新的存储空间,另外原始string的空间是没办法被再利用的,因为它是恒等的,当然作为考题不需要这么严格考虑。
Stack<char> ,StringBuilder 不是新分配的空间?
@水牛刀刀: 就知道你会这么说,我保留意见
@水牛刀刀: 对了我想问问什么代码是不需要内存空间的?
不分配新的内存空间是不可能的,因为这个过程中一定会产生新的字符串。从你的举例来看,你对“单词”的理解是按照空格分割的字符组合。
string str = "My name is LiLei!";
string[] words = str.Split(' ');
string result = string.Join(" ", words.Select(w => new string(w.Reverse().ToArray())));
可以不用产生新空间的,其实这道题就是考的就是大学里的常识数组倒排~
@今昭: 怎么倒排,不需要临时空间吗?
string str = "My name is LiLei!";
-- 其实最主要的函数就是这个了,Split
string[] words = str.Split(' ');
string returnValue = string.empty;
for (int i=words.length; i>0; i--)
{
returnValue += words[i];
// Console.Write(words[i]);
}
Console.Write(returnValue);
这还是新开辟内存了呀
我靠和尚,你这段程序啊能跑?
这个没翻转。。应该是returnValue+=words[i].Reverse();吧
学习了。。。
//没弄算法,用C#自带函数也可以实现. string str = "hello world!"; char[] str1= str.ToArray<char>(); Array.Reverse(str1); string s = new string(str1); string[] arr= s.ToString().Split(' '); Array.Reverse(arr); str= string.Join(" ", arr); Console.WriteLine(str);