下面给大家分享的是翻转单词顺序列的代码实现和思路相关内容,那么具体的代码应该如何实现呢?实现思路又是怎样的?一起来看一下实例吧。
题目:
身边来了一个新员工,每天早晨总是拿一本英文杂志写一些句子在本子上面,我对于新同事写的内容非常的好奇,所以,有一天就向新同事借过来看,但是我发现,我很难读懂它的意思,例如student. a am I,一直到后面,我才清楚的意识到,我的新同事把句子单词的顺序进行了翻转,正确的句子应该是I am a student,我对于--的翻转这些单词顺序不拿手,你可以帮助一下吗?
思路1:
翻转str从s到e的部分
代码实现:
void ReverseWord(string & str, int s, int e) { while (s < e) swap(str[s++], str[e--]); } string ReverseSentence(string str) { ReverseWord(str, 0, str.size() - 1); //先整体翻转 int s = 0, e = 0; int i = 0; while (i < str.size()) { while (i < str.size() && str[i] == ' ') //空格跳过 i++; e = s = i; //记录单词的第一个字符的位置 while (i < str.size() && str[i] != ' ') //不是空格 找单词最后一个字符的位置 { i++; e++; } ReverseWord(str, s, e - 1); //局部翻转 } return str; }
思路2:
先将整个句子进行翻转,之后,一一翻转每一个单词,根据空格来确定单词的起始和终止位置
代码实现:
public class Solution { public String ReverseSentence(String str) { char[] chars = str.toCharArray(); reverse(chars, 0, chars.length - 1); int blank = -1; for (int i = 0; i < chars.length; i++) { if (chars[i] == ' ') { int nextBlank = i; reverse(chars, blank + 1, nextBlank - 1); blank = nextBlank; } } reverse(chars, blank + 1, chars.length - 1); //最后一个单词单独进行反转 return new String(chars); } public void reverse(char[] chars, int low, int high) { while (low < high) { char temp = chars[low]; chars[low] = chars[high]; chars[high] = temp; low++; high--; } } }
思路3:
使用栈操作
例:“world! hello”:
首先每个字符串一次进栈:
之后再依次出栈:hello world!
代码实现:
public String ReverseSentence(String str) { if (str.trim() .equals("") && str.length() > 0) { return str; } Stack reverse = new Stack(); String string = str.trim(); String[] strings = string.split(" "); for (int i = 0; i length; i++) { reverse.push(strings[i]); } string = reverse.pop(); while (!reverse.isEmpty()) { string = string + " " + reverse.pop(); } return string; }
以上的3种思路大家都可以参考一下,更多Java实例,可以继续来本站了解。