求教JAVA版经典算法"I am good"变成"good am I",要求尽量不要开辟新的存储空间

t427795737 2009-12-12 07:12:13
求教JAVA版经典算法"I am good"变成"good am I",要求尽量不要开辟新的存储空间
...全文
208 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
luokun3221 2009-12-17
  • 打赏
  • 举报
回复
楼上正解
jingyinggong 2009-12-14
  • 打赏
  • 举报
回复
顶,很经典
xingtaoqq 2009-12-14
  • 打赏
  • 举报
回复
先把单个单词逆序,再把整个句子逆序
xiaosaner3 2009-12-13
  • 打赏
  • 举报
回复
1楼正解
guxue365 2009-12-12
  • 打赏
  • 举报
回复


public class reverse {

/**
* @param args
*/
public static void main(String[] args) {
String s = "I am a student";
int j = s.length()-1;
for(int i = s.length()-1;i>=0;i--)
{

char c;
if((c=s.charAt(i))!=' ' && (i!=0))
{
continue;
}
else
{
for(int k = i+1;k<=j;k++)
{
System.out.print(s.charAt(k));

}
if(i == 0)
{
System.out.print(s.charAt(0));
}
System.out.print(" ");
j = i-1;
}


}

}

}

guxue365 2009-12-12
  • 打赏
  • 举报
回复
基本意思如下:
public class reverse {

/**
* @param args
*/
public static void main(String[] args) {
String s = "I am a student";
int j = s.length()-1;
for(int i = s.length()-1;i>=0;i--)
{

char c;
if((c=s.charAt(i))!=' ' && (i!=0))
{
continue;
}
else
{
for(int k = i+1;k<=j;k++)
{
System.out.print(s.charAt(k));

}
if(i == 0)
{
System.out.print(s.charAt(0));
}
System.out.print(" ");
j = i-1;
}


}

}

}
绿色夹克衫 2009-12-12
  • 打赏
  • 举报
回复
Java的没有,c#的有一个!

using System;

namespace CommonLab
{
class Program
{
static void Main(string[] args)
{
char[] content = "I am good".ToCharArray();
Reverse(content, 0, content.Length - 1);
int startIndex = 0;

for (int i = 0; i < content.Length; i++)
{
if (content[i] == ' ')
{
Reverse(content, startIndex, i - 1);
startIndex = i + 1;
}
else if (i == content.Length - 1)
{
Reverse(content, startIndex, i);
}
}

Console.WriteLine(new string(content));
}

private static void Reverse(char[] content, int startIndex, int endIndex)
{
while (endIndex > startIndex)
{
char tmp = content[endIndex];
content[endIndex] = content[startIndex];
content[startIndex] = tmp;
endIndex--;
startIndex++;
}
}
}
}
lozzbey 2009-12-12
  • 打赏
  • 举报
回复
变成是指什么意思啊?直接输出还是保存在内存中?
如果是直接输出的话可以这样试下:从"I am good"的最后开始遍历,遇到空格时记录当前位置,然后把后面的第一个单词输出,再往前遍历,遍历到空格时输出两个空格间的单词,直到字符串的开始位置得到第一个单词。
如果需要别个保存在内存中的话,就要考虑下这个尽量不要开辟内存空间了。

还有一个办法,把"I am good"的三个单词分别用一个String保存,不要使用new的方式,再将变量名按序记录下来,反序之后得到的单词还是会引用原先保存在内存中的单词,并不会重新创建内存空间。
donkey301 2009-12-12
  • 打赏
  • 举报
回复
先整个字符串逆序一遍,然后每个单词逆序

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧