将一个英文句子反转, e.g. much. very you love I => I love you very much.
import java.util.Stack;
import java.util.StringTokenizer;
/**
* 将一个英文句子反转, e.g. much. very you love I => I love you very much.
*/
public class WordsReverse {
// spilt StringBuilder
public static String reverse1(String str) {
if (str == null || str.trim().equals("")) {
return str;
}
StringBuilder re = new StringBuilder();
String[] words = str.split(" ");
for (int length = words.length, i = length - 1; i >= 0; i--) {
re.append(words[i]);
if (i != 0) {
re.append(" ");
}
}
return re.toString();
}
// charAt StringBuilder
public static String reverse2(String str) {
if (str == null || str.trim().equals("")) {
return str;
}
StringBuilder re = new StringBuilder(str.length());
int pos = 0;
for (int length = str.length(), i = 0; i < length; i++) {
char ch = str.charAt(i);
if (ch == ' ') {
pos = 0;
}
re.insert(pos, ch);
if (ch != ' ') {
pos++;
}
}
return re.toString();
}
// StringTokenizer Stack StringBuilder
public static String reverse3(String str) {
if (str == null || str.trim().equals("")) {
return str;
}
StringTokenizer token = new StringTokenizer(str, " ");
Stack<String> stack = new Stack<String>();
while (token.hasMoreElements()) {
stack.push(token.nextToken());
}
StringBuilder re = new StringBuilder(str.length());
for (int length = stack.size(), i = 0; !stack.isEmpty(); i++) {
re.append(stack.pop());
if (i != length - 1) {
re.append(" ");
}
}
return re.toString();
}
// charAt Stack StringBuilder
public static String reverse4(String str) {
if (str == null || str.trim().equals("")) {
return str;
}
Stack<String> stack = new Stack<String>();
final int RESET = -1;
int start = RESET;
for (int length = str.length(), i = 0; i < length; i++) {
char ch = str.charAt(i);
if (ch != ' ' && start == RESET) {// word started
start = i;
} else if ((ch == ' ') && start != RESET) {// find word
stack.push(str.substring(start, i));
start = RESET;
} else if ((i == length - 1) && start != RESET) {// find word
stack.push(str.substring(start, i + 1));
start = RESET;
}
}
StringBuilder re = new StringBuilder(str.length());
for (int length = stack.size(), i = 0; !stack.isEmpty(); i++) {
re.append(stack.pop());
if (i != length - 1) {
re.append(" ");
}
}
return re.toString();
}
public static void main(String[] args) {
long beginTime = System.currentTimeMillis();
System.out.println(reverse1(null) + "|");
System.out.println(reverse1("") + "|");
System.out.println(reverse1(" ") + "|");
System.out.println(reverse1(" ") + "|");
System.out.println(reverse1(" ") + "|");
System.out.println(reverse1(" BB ") + "|");
System.out.println(reverse1(" AA BB ") + "|");
System.out.println(reverse1("ABC is a pig.") + "|");
System.out.println(reverse1(" ABC is a pig. ") + "|");
reverse1(longString);
System.out.println("spend time:"
+ (System.currentTimeMillis() - beginTime));
beginTime = System.currentTimeMillis();
System.out.println(reverse2(null) + "|");
System.out.println(reverse2("") + "|");
System.out.println(reverse2(" ") + "|");
System.out.println(reverse2(" ") + "|");
System.out.println(reverse2(" ") + "|");
System.out.println(reverse2(" BB ") + "|");
System.out.println(reverse2(" AA BB ") + "|");
System.out.println(reverse2("ABC is a pig.") + "|");
System.out.println(reverse2(" ABC is a pig. ") + "|");
reverse2(longString);
System.out.println("spend time:"
+ (System.currentTimeMillis() - beginTime));
beginTime = System.currentTimeMillis();
System.out.println(reverse3(null) + "|");
System.out.println(reverse3("") + "|");
System.out.println(reverse3(" ") + "|");
System.out.println(reverse3(" ") + "|");
System.out.println(reverse3(" ") + "|");
System.out.println(reverse3(" BB ") + "|");
System.out.println(reverse3(" AA BB ") + "|");
System.out.println(reverse3("ABC is a pig.") + "|");
System.out.println(reverse3(" ABC is a pig. ") + "|");
reverse3(longString);
System.out.println("spend time:"
+ (System.currentTimeMillis() - beginTime));
beginTime = System.currentTimeMillis();
System.out.println(reverse4(null) + "|");
System.out.println(reverse4("") + "|");
System.out.println(reverse4(" ") + "|");
System.out.println(reverse4(" ") + "|");
System.out.println(reverse4(" ") + "|");
System.out.println(reverse4(" BB ") + "|");
System.out.println(reverse4(" AA BB ") + "|");
System.out.println(reverse4("ABC is a pig.") + "|");
System.out.println(reverse4(" ABC is a pig. ") + "|");
reverse4(longString);
System.out.println("spend time:"
+ (System.currentTimeMillis() - beginTime));
}
static String t = "das dasd sad asd sdsa as as dasd sdasdad adasdsd as dsa d asd sa d asd as das d sad asdd as das d asd as das d asd as d sad a sd asd as da sda ds ";
static String longString = t + t + t + t + t + t + t + t + t + t + t + t
+ t + t + t + t + t + t + t + t + t + t + t + t + t + t + t + t + t
+ t + t + t + t + t + t + t + t + t + t + t + t + t + t + t + t + t;
}
输出:
null|
|
|
|
|
BB |
BB AA |
pig. a is ABC|
pig. a is ABC |
spend time:14
null|
|
|
|
|
BB |
BB AA |
pig. a is ABC|
pig. a is ABC |
spend time:8
null|
|
|
|
|
BB|
BB AA|
pig. a is ABC|
pig. a is ABC|
spend time:5
null|
|
|
|
|
BB|
BB AA|
pig. a is ABC|
pig. a is ABC|
spend time:3
20120425写的新方法:
import java.util.Stack;
public class Demo {
/**
* 反转字符串的单词顺序
*/
public static void main(String[] args) {
String str = "hello world is demo";
System.out.println(reverse(str));
}
static String reverse(String str) {
StringBuilder sb = new StringBuilder(str.length());
Stack<Character> stack = new Stack<Character>();
int i = str.length() - 1;
while (i >= 0) {//从尾部开始遍历
char ch = str.charAt(i);
if (ch == ' ') {//遇到空格,则说明找到单词,将单词取出
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
sb.append(ch);
} else {//遇到非空格,则字符入栈
stack.push(ch);
}
i--;
}
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
return sb.toString();
}
}
分享到:
相关推荐
给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello” 输入描述: 输入数据有多组,每组占一行...
### 输入一个英文句子,翻转句子中单词的顺序 #### 题目背景与解析 在计算机编程领域,字符串操作是非常基础且重要的部分。对于应聘者来说,掌握字符串相关的算法和技巧是必不可少的能力之一。微软作为全球知名的...
本文将详细介绍如何实现一个功能:给定一个句子,不仅将其单词顺序倒序,还将每个单词中的字母顺序也进行倒序。这种方法在文本处理、算法设计等领域有着广泛的应用。 #### 知识点一:字符串分割与反转 为了实现这...
在Java编程中,"基于java采用管道过滤器风格编写一个英文句子转大写并倒序的功能"是一项常见的任务,它涉及到输入输出流、字符转换以及字符串处理等多个知识点。这一过程通常利用Java的IO流和过滤器(Filter)设计...
4. **循环结构**:在`ReverseSentence`函数中,使用了一个外层循环来遍历整个句子,找到每个单词的开始和结束位置;内层循环用于反转单词内的字符。通过这种方式,可以有效地处理句子中的每个单词。 5. **边界条件...
本文将详细介绍如何将一个英文语句以单词为单位进行逆序排放。这个方法适用于各种需要反转单词顺序的场景,例如处理输入的句子或处理自然语言处理任务。 首先,我们需要理解问题的核心——如何在保持单词完整性的...
Java中提供了一个StringBuffer类,该类提供了一个reverse()方法,可以将字符串反转。下面是一个使用StringBuffer类的reverse()方法的示例程序: ```java public class StringReverse { public static void main...
给定一个英文句子(字符串),要求我们反转其中的单词顺序,但保持单词内部的字符顺序不变。此外,句子中的所有单词都由空格分隔,且句子中可能存在多个连续的空格。例如,输入字符串 "Let's take LeetCode ...
题目要求通过Python编程实现一个功能,即给定一个包含英文单词的字符串,将其按照单词进行反转,同时保持原有的空格位置不变。例如,将字符串`"I love China!"`转换为`"China! love I"`。 #### 解决方案概述 针对这...
我们可以用一个辅助数组记录每个字符是否出现过,然后遍历原始字符串,只保留未出现过的字符。以下是一个简单的C++实现: ```cpp #include #include using namespace std; string removeDuplicates(string str) ...
当找到单词边界时,我们可以将左右指针之间的子串反转,然后继续寻找下一个单词。 以下是实现这个功能的Java代码示例: ```java public class Solution { public String reverseWords(String s) { if (s == null...
1. 输入:一个不超过80个字符的英文句子,由单词和空格组成,单词由英文字母构成,单词间只有一个空格。 2. 输出:将输入句子中的单词顺序反转后的新句子,保持原有的单词和空格。 在Python中,可以按照以下步骤来...
目的 编写应用程序来反转字符串中的单词。 结果 假设条件 注意“字符串中的反向单词”是不明确的。 标点符号也可以通过多种方式处理。 反转“我太——高兴了!...考虑逐句颠倒并在每个句子的末尾保留标点符号。
本篇将重点讲解如何利用Java编程语言实现一个回文字(单词倒序)的功能。这种功能常用于文本处理,比如反转一句话的单词顺序,但保持单词内部字符的顺序不变。 首先,我们需要理解问题的核心:将输入的句子按单词...
给定一个字符数组,其中形成一个由单词组成的句子,设计一种高效算法来反转单词的顺序(而非单个字符)。这可以通过两次反转来实现:首先整体反转整个字符串,然后逐个反转每个单词。 ### 8. 地球上的特殊位置 ...
逻辑关系的关联词是英语写作中非常重要的一部分,它们可以帮助我们明确地表达思想、建立逻辑关系和连接句子。下面我们将对这些关联词进行详细的介绍和解释。 1. 表顺承、补充与递进 在英语写作中,我们经常使用...
- **问题描述**:输入一个英文句子,翻转句子中单词的顺序,但单词内部字符的顺序保持不变。 - **解决方案**:首先反转整个句子,然后逐个反转每个单词,最后得到单词顺序反转但每个单词内部字符顺序不变的结果。 *...
编写一个函数`void reverseSentence(char *pStr, int iLen)`,该函数接收一个字符数组`pStr`作为输入,并将这个数组中的英文句子进行倒置。例如,若输入为"iamondutytoday",则输出应为"todaydutyonami"。 #### ...
与拆句法相反,合并法是将多个简短的句子组合成一个复杂的句子,以体现原文的连贯性和紧凑性,尤其在英语中,长句能更好地表达复杂的逻辑关系。 6. 正译法 正译法是指按照通常的翻译顺序,直接对应原文的结构和词汇...
- 给定一个英文句子,编写程序反转每个单词的字符顺序,但保留单词的顺序不变。 **解题思路:** - 分离出每个单词,然后反转每个单词中的字符顺序。 - 最后重新组合单词形成最终的结果。 ### 总结 这些面试题目...