倒置字符串——牛客笔试题
题目描述
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
输出描述:
依次输出倒置之后的字符串,以空格分割
示例
输入:
I like beijing.
输出:
beijing. like I
核心思路
1. 先定义一个翻转函数reverse();
2. 整体转置;
3. 定义每一个单词的首下标为i,尾下标为j,如果尾下标j遇到空格就翻转i~(j-1)之间的字符,然后令i=j+1;继续往后循环…;
4. 当j=len时,直接翻转i~(j-1)之间的字符;
5. 需要注意的是:最后一个字符串翻转之后,还需要令i=j;目的是跳出while(i<len)的循环,如果没有这一步,将无法结束循环。
代码
import java.util.Scanner;
public class reverse_String {
public static void reverse(char[] array, int start, int end) {
while (start < end) {
char temp = array[start];
array[start] = array[end];
array[end] = temp;
start++;
end--;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
char[] ch = s.toCharArray();
int len = s.length();
//整体转置
reverse(ch, 0, len - 1);
int i = 0;
while (i < len) {
int j = i;
while (j < len && ch[j] != ' ') {
j++;
}
if (j < len) {
reverse(ch, i, j - 1);
i = j + 1;
} else {
reverse(ch, i, j - 1);
//此时处理最后一个字符串,让i=j的目的是跳出while(i<len)的循环
//如果没有这一步,无法结束循环
i = j;
}
}
String str = new String(ch);
System.out.println(str);
}
}