剑指offer—58.翻转单词顺序列—分析及代码(Java)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了剑指offer—58.翻转单词顺序列—分析及代码(Java),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1605字,纯文字阅读大概需要3分钟。
内容图文
![剑指offer—58.翻转单词顺序列—分析及代码(Java)](/upload/InfoBanner/zyjiaocheng/614/2213a51cfa504b2dae36d9ef76dd1f89.jpg)
剑指offer——58.翻转单词顺序列——分析及代码[Java]
一、题目
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
二、分析及代码
1. 两次翻转
(1)思路
先翻转各个单词,再对整个句子进行二次翻转,即实现目标。
(2)代码
public class Solution {
public String ReverseSentence(String str) {
if (str.trim().equals(""))
return str;
char[] chstr = str.toCharArray();
int l = 0, length = str.length();
for (int i = 0; i < length; i++) {
if (chstr[i] == ' ') {
Reverse(chstr, l, i - 1);
l = i + 1;
}
if (i == length - 1 && l < i)
Reverse(chstr, l, length - 1);
}
Reverse(chstr, 0, length - 1);
return String.valueOf(chstr);
}
public void Reverse(char[] chstr, int l, int r) {
int m = (l + r) >> 1;
for (int i = l; i <= m; i++) {
char temp = chstr[i];
chstr[i] = chstr[l + r - i];
chstr[l + r - i] = temp;
}
return;
}
}
(3)结果
运行时间:21ms,占用内存:9648k。
2. 直接拼接
(1)思路
如果允许使用辅助空间,直接对原字符串进行拼接即可。
(2)代码
public class Solution {
public String ReverseSentence(String str) {
if (str.trim().equals(""))
return str;
String[] substr = str.split(" ");
String ans = substr[substr.length - 1];
for (int i = substr.length - 2; i >= 0; i--)
ans = ans.concat(" " + substr[i]);
return ans;
}
}
(3)结果
运行时间:20ms,占用内存:9360k。
三、其他
暂无。
内容总结
以上是互联网集市为您收集整理的剑指offer—58.翻转单词顺序列—分析及代码(Java)全部内容,希望文章能够帮你解决剑指offer—58.翻转单词顺序列—分析及代码(Java)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。