`

java-颠倒一个句子中的词的顺序。比如: I am a student颠倒后变成:student a am I

 
阅读更多

public class ReverseWords {

	/**
	 * 题目:颠倒一个句子中的词的顺序。比如: I am a student颠倒后变成:student a am I.词以空格分隔。
	 * 要求:
	 * 1.实现速度最快,移动最少
	 * 2.不能使用String的方法如split,indexOf等等。
	 * 解答:两次翻转。
	 */
	public static void main(String[] args) {
		String str="  ^busy living, or busy     dying! $ ";
		str=reverseWords(str);
		System.out.println(str);
	}

	/*
	 Because we cannot use "String.split" to get each single word,
	 we use 'head' index and 'tail' index to find a word
	 Note that there're two cases in finding tail:	
	 1.current char is not ' ' and next char is ' ' 
	 2.current char is the end of string
	 */
	public static String reverseWords(String str){
		if(str==null){
			return null;
		}
		int length;
		if((length=str.length())==0 || length==1){
			return str;
		}
		char[] letters=str.toCharArray();
		int begin=-1;
		int end=-1;
		boolean hasBegined=false;
		boolean hasEnded=false;
		for(int i=0,len=str.length();i<len-1;i++){
		
			if(letters[i]!=' '){
				if(!hasBegined){
					begin=i;
					hasBegined=true;
				}else{
					if(letters[i+1]==' '){//case 1
						end=i;
						hasEnded=true;
					}
					if(i==len-2&&letters[i+1]!=' '){//case 2
						end=i+1;
						hasEnded=true;
					}
					if(hasEnded){
						reverseOneWord(letters,begin,end);//reverse each single word
						hasBegined=false;
						hasEnded=false;
					}
				}
			}
		}
		reverseOneWord(letters,0,str.length()-1);//reverse the whole string
		return new String(letters,0,str.length());
	}
	
	//reverse a single word
	public static void reverseOneWord(char[] letters,int begin,int end){
		if(letters==null||letters.length<2){
			return;
		}
		int len=letters.length;
		if(begin>=0&&begin<len&&end>=0&&end<len){
			while(begin<end){
				/*swap solution 1
				char tmp=letters[begin];
				letters[begin]=letters[end];
				letters[end]=tmp;
				*/
				//swap solution 2
				letters[begin]^=letters[end];
				letters[end]^=letters[begin];
				letters[begin]^=letters[end];
				begin++;
				end--;
			}
		}
	}
}

1
1
分享到:
评论
1 楼 liang1022 2012-04-14  
搞的如此複雜,有什麼意義嗎?為什麼不能用String 方法?

相关推荐

    初中英语语法35695PPT学习教案.pptx

    限定词分为前位词、中位词和后位词,如倍数、分数放前,冠词居中,代词和物主代词放后。顺序为:前位-中位-后位。冠词分为定冠词(the)和零冠词,定冠词表示特指,零冠词用于专有名词、不可数名词等特定情况。 **...

    字符串操作总结

    字符串反转是指将一个字符串中的字符顺序颠倒,使得原本在后面的字符现在出现在前面。这里我们有两种实现方法: - 使用`System.Text.StringBuilder`类: ```csharp private string StrReverse(string str) { ...

    链表学生管理系统-数据结构

    - **`next`**:一个指向下一个`LNode`类型的指针,用于链接到链表中的下一个节点。 #### 功能实现 系统提供了多种功能来操作学生信息,包括创建链表、显示所有学生信息、查找最高分学生、反转链表、删除指定位置的...

    SQL与JAVA算法题目(难度和一般面试笔试差不多).doc

    该题目要求编写一个算法方法,根据typeKey获取所有相关的商品信息。我们使用迭代器遍历商品列表,并使用hasParentTypeKey()方法判断商品的类型是否是目标类型的子级类型,如果是则添加到结果列表中。

    2021-2022计算机二级等级考试试题及答案No.13032.docx

    2. 关系数据库中的记录顺序是无关紧要的,前后顺序可以任意颠倒,不影响库中的数据关系。数据库会根据指定的键或索引来组织和检索数据,而不是记录的物理顺序。 3. 在公司部门和职员的关系中,职员与部门的联系类型...

    英语词汇一点通(速提高版)

    例如,题目中给出了四个选项:A. consequently, B. continuously, C. constantly, D. consistently。这些词都有连续的意思,但具体含义有所不同。"consequently"意为"因此,所以","continuously"指"不间断地",...

    VFP选择题(2)计算机二级.pdf

    其他选项的顺序错误:A选项的asc是升序,且where子句应在order by之前;C选项的desc和order语法错误;D选项的desc和order位置颠倒。 132. 正确的选择SQL命令是 `select 专业, count(*) from student group by 专业`...

    随堂测验作业

    ELEMENT student (id, name, score)&gt;表示学生元素包含学号和姓名元素,顺序不能颠倒,且每个学生都有一个分数。 - 可以添加属性定义,如&lt;!ATTLIST student id ID #REQUIRED&gt;表示学生元素有一个id属性,是ID类型,且...

    2021-2022计算机二级等级考试试题及答案No.19882.docx

    11. 关系数据库记录顺序:关系数据库文件中的记录顺序可以任意颠倒,不影响数据关系,因为记录的顺序并不重要,关键在于记录的键值。 12. 显示汉字:在显示或打印汉字时,系统使用的是汉字的字形码,也就是用于屏幕...

    2012年计算机等级二级C语言上机考试题库

    在这个题目中,`struct student`定义了一个包含学号、姓名和成绩的结构体。结构体数组可以用来存储多个学生的信息。 - `strcmp`函数是C语言中的字符串比较函数,用于比较两个字符串的字典顺序。在给定的代码中,`...

    2021-2022计算机二级等级考试试题及答案No.19567.docx

    4. 关系数据库记录:数据库文件中的记录顺序是可以任意颠倒的,不影响数据之间的关系。 5. 标准输入输出流:在编程中,System.In和System.Out是标准输入输出流,InputStream和OutputStream则是Java中的输入输出流类...

    VisualC面向对象编程教程第2版(王育坚)清华大学出版社课后答案.docx

    这里定义了一个结构体student,包含姓名、学号和成绩数组,然后输入10个学生的信息,计算平均成绩并输出。 这些习题覆盖了C++编程的基础知识,包括输入输出、条件判断、循环、数组、指针、结构体、数学运算等,对于...

    小学五年级对划线部分提问PPT教案.pptx

    1. 如果句中有be动词(am, is, are),将其提前到句首,第一人称变为第二人称,如 "Is this a book?" 或 "Are you a student?" 2. 当动词是"have"时,添加助动词"do"(主语非第三人称单数)或"does"(主语是第三...

    C语言程序设计:复习二NEW-2.ppt

    在实际考试中,可能会要求读取外部文件(如`in.dat`)中的数据,然后将结果写入另一个文件(如`out.dat`)。这通常涉及文件操作,例如使用`fopen`打开文件,`fscanf`或`fgets`读取数据,以及`fprintf`或`fwrite`写入...

    新概念英语第二册Thebestartcritics最佳艺术评论家PPT学习教案.pptx

    语言点讲解中,介绍了与艺术相关的词汇扩展,如**art student**、**art gallery**、**artist**、**artiste**,以及**criticise**、**criticism**、**critical**、**critically**,这些词展示了艺术评论的层次和态度...

    一下----中华歌谣100首--阅读试题.doc

    本资源是一个教育类的试题集,内容涵盖了《中华歌谣100首》的主要知识点,包括填空题、判断题等形式。下面是对试题的详细解释和知识点的总结: 一、填空题 1. 《中华歌谣100首》分为五个部分,包括(歌谣、故事、...

Global site tag (gtag.js) - Google Analytics