`
xifangyuhui
  • 浏览: 188994 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

笔试题之以单词为最小单位翻转字符串

阅读更多

  最近做了几个公司的笔试题,都考到了以单词为最小单位翻转字符串,这里自己总结一下:
  Write the function void reverseStringWordByWord(char[] input) that reverses 
  a string word by word.  For instance, 
  reverseStringWordByWord("this is my test program about string reverse !") --> "! reverse string about program test my is this"
注意:方法要求以字符数组为输入参数

思路:

首先将整个字符数组翻转一遍,例如this is my test program about string reverse ! 翻转为

!esrever gnirts tuoba margorp tset ym si siht

接着使用两个索引i和j分别指向每个单词的起始和结束位置,利用单词分隔符(这里是空格)确定单词的结束位置,找到单词的起始位置后直接在原字符数组中对该单词进行翻转。结果为! reverse string about program test my is this。需要注意的是最后一个单词后面没有分隔符了,需要通过数组长度进行判断最后一个单词的结束位置。

public class StringReverse {

	public static void main(String[] args) {
		
		String str = "this is my test program about string reverse !";
		char[] chars = str.toCharArray();
		print(chars);
		reverseString(chars);
		print(chars);
	}
	/**
	 * 翻转方法,用来翻转字符数组chars
	 * 首先将字符数组中的所有字符包括空格按顺序翻转;
	 * 然后从头开始遍历,记录开始位置i,结束位置j,直到j对应元素是空格时就翻转i到j
	 * 之间的元素,翻转完后,使i=++j,i记录下一次翻转的开始位置.
	 * 有一种特殊情况是当i和j到了最后一个单词时,最后面没有空格了,不能再根据空格得到
	 * 结束位置,而是直接j是否等于数组长度-1来判断j是否移动到最后一个元素了,此时再把
	 * i和数组长度传给reverse方法
	 * 
	 * @param chars
	 */
	private static void reverseString(char[] chars) {
		int length = chars.length;
		reverse(chars, 0, length);
		int i=0, j=0; //i表示每一个单词翻转的起始位置,翻转时j表示结束位置+1,即空格的位置
		while(j<length) {
			if(j == length-1) {
				reverse(chars, i, j+1);
				break;
			} else {
				if(chars[j] != ' ' )
					j++;
				else if(chars[j] == ' '){
					reverse(chars, i, j);
					i = ++j;
				}
			}
		}
	}
	/**
	 * 打印函数,打印chars数组
	 * @param chars 
	 */
	public static void print(char[] chars) {
		for(char c:chars)
			System.out.print(c);
		System.out.println();
	}
	/**
	 * 翻转char数组中从begin到end位置之间的元素,end是比最后一个翻转位置大一
	 * @param chars 翻转数组
	 * @param begin 起始位置
	 * @param end 结束位置+1
	 */
	private static void reverse(char[] chars, int begin, int end) {
		int total = begin+end-1;
		for(int i=begin; i<=total/2; i++ ) {
			char temp = chars[i];
			chars[i] = chars[total-i];
			chars[total-i] = temp;
		}
		print(chars);
	}
}

 

 

0
1
分享到:
评论
2 楼 xifangyuhui 2010-11-07  
yangphere 写道
public static void main(String[] args) {
		String str = "this is my test program about string reverse !";

		String[] ss = str.split(" ");

		StringBuffer sb = new StringBuffer(ss.length);

		for (int i = ss.length - 1; i >= 0; i--) {
			String string = ss[i];
			sb.append(string).append(" ");
		}
		System.out.println(sb.toString().substring(0, sb.toString().length() - 1));
	}

笔试题不是直接用字符串做参数的,而是一个字符数组。
1 楼 yangphere 2010-11-07  
public static void main(String[] args) {
		String str = "this is my test program about string reverse !";

		String[] ss = str.split(" ");

		StringBuffer sb = new StringBuffer(ss.length);

		for (int i = ss.length - 1; i >= 0; i--) {
			String string = ss[i];
			sb.append(string).append(" ");
		}
		System.out.println(sb.toString().substring(0, sb.toString().length() - 1));
	}

相关推荐

    腾讯在线笔试题-字符串反转,以及把整个字符串逆序

    首先,字符串反转是编程中常见的问题,常常用于各类笔试和面试中。而字符串逆序则是在反转的基础上,进一步处理,让整个字符串的顺序完全颠倒。 在本知识点中,将详细介绍以下内容: 1. 字符串反转的原理和方法 2. ...

    Code_笔试题_字符串压缩_

    标题中的“Code_笔试题_字符串压缩_”指的是一个与编程相关的笔试题目,重点在于实现字符串的压缩功能。这类问题通常出现在技术面试或招聘过程的笔试试题中,旨在考察应聘者的编程能力和对数据结构的理解。 描述中...

    字符串常见笔试题

    1 将字符串转化为整数。2 将整数转化为字符串(考虑正负号的问题)。3 实现字符串拷贝函数strcpy(程序的完整性)。4 编程实现memcpy函数(以字节为单位的拷贝)。5 编程实现memmove函数。 等笔试题。

    C语言字符串练习(习题+答案).zip

    本资源"《C语言字符串练习(习题+答案).zip》"正是针对这一需求而准备的,它包含了C语言字符串操作的专项练习题和对应的答案,帮助学习者巩固和提升在字符串处理方面的技能。 字符串在C语言中扮演着重要角色,它们...

    笔试题 还是那个查找一个字符串中出现次数最多的字符 java 代码2

    笔试题 还是那个查找一个字符串中出现次数最多的字符 java 代码2

    各种C语言字符串函数-笔试面试必备

    字符串反转是常见的字符串操作之一,主要用于改变字符串的顺序。在C语言中,可以通过多种方式实现字符串的反转,包括但不限于while循环、for循环、位运算以及递归等。 - **版本1: while版** 这是最直观的方法,...

    反转字符串1

    本题主要涉及的是字符串处理和算法设计,具体是实现将英文句子中单词的顺序反转,但保持单词内部字符的顺序不变。在面试或笔试中,这类问题经常出现,因为它能考察到程序员对字符串操作的熟练程度以及逻辑思维能力。...

    查找连续的字符串-百度笔试题

    ### 查找连续的字符串-百度笔试题 #### 题目背景与要求 这是一道来自百度公司的编程笔试题目。题目要求实现一个程序,能够在一个给定的字符串中找到所有连续的数字序列,并最终输出最长的连续数字串。 #### 题目...

    嵌入式软件笔试题合集.zip

    嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集...

    C++面试题笔试题C++ 数据结构算法笔试题资料合集.zip

    C++面试题笔试题C++ 数据结构算法笔试题资料合集: 50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案....

    中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题

    中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 v中兴笔试题 中兴笔试题 ...中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题

    java笔试题笔试题

    java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 ...

    嵌入式软件工程师笔试题.pdf

    本资源是一份嵌入式软件工程师笔试题,涵盖了多个嵌入式软件开发中的知识点,包括字符串逆序、链表逆序、字节位计算、字节搜索、字符串转换等。 题目1:将一个字符串逆序 在这道题中,考生需要编写一个函数将一个...

    华信笔试题笔试题笔试题

    大连华信去年的笔试题,可以给各位即将工作的同学一些参考

    变态版java笔试试题

    Java 笔试试题变态版是 Java 开发者面试的常见题目,涵盖了 Java 基础知识、垃圾收集器、字符串、Math 函数、线程、数组、多态性、Set 集合等方面。 一、垃圾收集器(GC) 垃圾收集器(GC)是 Java 中自动管理...

    C#笔试题大全C#笔试题大全C#笔试题大全.

    C#笔试题大全C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.,让你...

    C++ 笔试题汇总 C++ 笔试题汇总.doc

    本文将通过C++的笔试题汇总,带大家复习和巩固C++语言中的关键知识点,包括链表反转、字符串处理、运算符重载、引用和指针的使用等。 首先,我们来探讨链表反转的问题。链表是数据结构中的基础组成部分,而反转链表...

    字符串反转函数

    字符串反转函数是编程中常见的一种操作,特别是在面试和笔试中经常被用来测试候选人的基本编程技巧和理解能力。本文将详细讲解如何使用堆栈来实现一个可以处理中文和英文混合的字符串反转函数。 首先,我们需要了解...

    百度笔试题 百度 笔试题

    【百度笔试题】中的知识点主要涉及三个方面:编程题、算法题和系统设计。下面将分别对这三个方面进行详细的解析。 1. **编程题** 这道编程题要求编写一个函数`is_include(char *a, char *b)`,判断字符串`b`的所有...

Global site tag (gtag.js) - Google Analytics