最近做了几个公司的笔试题,都考到了以单词为最小单位翻转字符串,这里自己总结一下:
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);
}
}
分享到:
相关推荐
首先,字符串反转是编程中常见的问题,常常用于各类笔试和面试中。而字符串逆序则是在反转的基础上,进一步处理,让整个字符串的顺序完全颠倒。 在本知识点中,将详细介绍以下内容: 1. 字符串反转的原理和方法 2. ...
标题中的“Code_笔试题_字符串压缩_”指的是一个与编程相关的笔试题目,重点在于实现字符串的压缩功能。这类问题通常出现在技术面试或招聘过程的笔试试题中,旨在考察应聘者的编程能力和对数据结构的理解。 描述中...
1 将字符串转化为整数。2 将整数转化为字符串(考虑正负号的问题)。3 实现字符串拷贝函数strcpy(程序的完整性)。4 编程实现memcpy函数(以字节为单位的拷贝)。5 编程实现memmove函数。 等笔试题。
本资源"《C语言字符串练习(习题+答案).zip》"正是针对这一需求而准备的,它包含了C语言字符串操作的专项练习题和对应的答案,帮助学习者巩固和提升在字符串处理方面的技能。 字符串在C语言中扮演着重要角色,它们...
笔试题 还是那个查找一个字符串中出现次数最多的字符 java 代码2
字符串反转是常见的字符串操作之一,主要用于改变字符串的顺序。在C语言中,可以通过多种方式实现字符串的反转,包括但不限于while循环、for循环、位运算以及递归等。 - **版本1: while版** 这是最直观的方法,...
本题主要涉及的是字符串处理和算法设计,具体是实现将英文句子中单词的顺序反转,但保持单词内部字符的顺序不变。在面试或笔试中,这类问题经常出现,因为它能考察到程序员对字符串操作的熟练程度以及逻辑思维能力。...
### 查找连续的字符串-百度笔试题 #### 题目背景与要求 这是一道来自百度公司的编程笔试题目。题目要求实现一个程序,能够在一个给定的字符串中找到所有连续的数字序列,并最终输出最长的连续数字串。 #### 题目...
嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集...
C++面试题笔试题C++ 数据结构算法笔试题资料合集: 50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案....
C++ 笔试题汇总是对 C++ 语言基础知识的总结和实践,涵盖了链表反转、字符串处理、运算符重载、引用和指针等多个知识点。本文通过实际代码示例和问题分析,帮助读者更好地理解和掌握 C++ 语言的基础知识。 1. 链表...
中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 v中兴笔试题 中兴笔试题 ...中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题
java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 ...
本资源是一份嵌入式软件工程师笔试题,涵盖了多个嵌入式软件开发中的知识点,包括字符串逆序、链表逆序、字节位计算、字节搜索、字符串转换等。 题目1:将一个字符串逆序 在这道题中,考生需要编写一个函数将一个...
答案一使用了 strlen 函数来获取字符串的长度,然后使用两个循环来遍历字符串,查找待替换的子字符串,并将其替换为新的字符串。 答案二使用了一个循环来遍历字符串,并使用指针来查找待替换的子字符串,并将其替换...
Java 笔试试题变态版是 Java 开发者面试的常见题目,涵盖了 Java 基础知识、垃圾收集器、字符串、Math 函数、线程、数组、多态性、Set 集合等方面。 一、垃圾收集器(GC) 垃圾收集器(GC)是 Java 中自动管理...
大连华信去年的笔试题,可以给各位即将工作的同学一些参考
C#笔试题大全C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.,让你...
字符串反转函数是编程中常见的一种操作,特别是在面试和笔试中经常被用来测试候选人的基本编程技巧和理解能力。本文将详细讲解如何使用堆栈来实现一个可以处理中文和英文混合的字符串反转函数。 首先,我们需要了解...