描述

将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I

输入描述:

每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100

输出描述:

依次输出倒置之后的字符串,以空格分割

示例1

输入:

I like beijing.

输出:

beijing. like I

https://www.nowcoder.com/practice/ee5de2e7c45a46a090c1ced2fdc62355?tpId=85&&tqId=29867&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking

这是题目链接,看完此篇文章可以点开试一试~~~

分析思路:

在拿到字符串后,首先想到的方法就是倒置字符串。但我们可能会遇到以下两个问题:

问题一:倒置字符串为整体倒置,无法将每一组单词位置分别进行倒置但单词内顺序不变

---->我们可以将字符串进行两次倒置。第一次整体进行倒置,第二次分别对每个单词进行倒置。

问题二:怎样倒置

---->在String字符串中没有内置的reverse函数,StringBuffer中有内置的reverse函数,但是我们通过看源码可知此函数没有参数传入,因此无法倒置指定区间的字符串。所以我们需要自己解决reverse函数。这个函数在牛客上也有链接,属于入门级编程,主要考察思想。

解决过程:

编写倒置函数:该函数需要传入三个参数:需要被倒置的数组arr,倒置开始下标start,倒置终止下标end。定义两个指针表示数组下标,每次交换开始下标与终止下标的元素。

对于输入进的字符串,我们先整体进行倒置,虽然每个单词的拼写顺序已经被打乱,但是每一个单词在应该输出结果的对应的位置。

倒置前      l         like        beijing.
倒置后

gnijieb.    ekil            I

对于已经倒置过的字符串我们定义两个指针,都指向起始位置,当j指针遇到空格或者j指针超出数组长度时,我们将两个指针的区间进行倒置,倒置后的两个指针重新指向合理的位置,准备进行下一次指向。

倒置前
                                        gnijieb        ekil       I
                                        i
                                        j
倒置后
                                         beijing      ekil        I
                                                          i
                                                      j

倒置后 i = j + 1;重新开始第二次的倒置,直到完成整个字符串的遍历。

注意:

在进行倒置函数编写时,需要使用void类型,当形参传入实参时,待倒置的数组arr就会被更新成已经成功的数组。若使用char[ ]类型,在倒置过程中会产生许多的与、临时变量。

打印时,如果直接输出Arrays.toString(arr)会被机器判定不通过,因为调用此函数时输出的结果被自动化分为一个个独立的字符,因此需要使用String进行接收,打印输出String类型的字符串。

Java实现代码如下:

import java.util.*;public class Main{public static void main(String[] args) {Scanner in = new Scanner(System.in);String given = in.nextLine();char[] ans = given.toCharArray();int len = ans.length;reverse(ans,0,len-1);//将所有的字符进行倒置int start = 0;while(start < len) {int end = start;while(end < len && ans[end] != ' ') {//若只有一个字符则出现越界,所以要用end<len进行判断end++;}reverse(ans,start,end-1);//分别倒置每一部分start = end + 1;}String ansEnd = new String(ans);//题目中要求按照字符串输出System.out.println(ansEnd);}public static void reverse(char[] arr, int start, int end) {//可以设置为void型,arr中的元素自动倒置更新while(start < end) {char tmp = arr[start];arr[start] = arr[end];arr[end] = tmp;start++;end--;}}
}

Java_[倒置字符串]将一句话的单词进行倒置,标点不倒置。相关推荐

  1. 倒置字符串 将一句话的单词进行倒置,标点不倒置。

    倒置字符串 将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 解题思路: 先将字符串整体逆置,然后再逆置以空格分隔的单词,这样就 ...

  2. 将一句话的单词进行倒置,标点符号不倒换。比如一句话:“i love you.”倒换后变为you. love i

    #include <string.h> #include <stdio.h> #include <stdlib.h>//将一句话的单词进行倒置,标点符号不倒换.比如 ...

  3. [每日一题]C语言:将输入的一句话的单词倒置,但标点符号不倒置

    文章目录 题目内容 题目分析 代码实现 程序思考 题目内容 牛客网上刷题碰到的:将一句话的单词进行倒置,其中标点符号不倒置. 例如输入一句话"I Love Beijing."要求输 ...

  4. 将一句话的单词进行倒置,标点不倒置

    题目:将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beijing ...

  5. 将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I

    1.题目描述 将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like bei ...

  6. 将一句话的单词进行倒置,标点符号不倒置

    腾讯2016年4月2号暑假实习移动开发岗的笔试题 将一句话中的单词进行倒置(单词之间倒转,单词本身不倒置),标点符号不倒置. 比如一句话"I like China.",倒置后变成& ...

  7. 《好未来编程题》倒置字符串

    题目描述 将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beiji ...

  8. C语言实现来实现字符串反转,只有单词顺序反转,组成单词的字母不反转

    目录 ⚡一.解题思路 ⛄ 二.完整代码+注释 ❄️ 三.代码剖析 ✂️ 1.实现字符串整体的翻转 ✒️ 2.一个单词的翻转 ✏️3.字符串中的每一个单词的翻转 ⚡一.解题思路 如何将一句话的单词倒置, ...

  9. python |倒置字符串

    题目: 将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beijin ...

最新文章

  1. 170个新项目,579个活跃代码仓库,Facebook开源年度回顾
  2. oracle自动分区maxvalue,分区表中的maxvalue参数设置-Oracle
  3. 记一次Java多线程程序调试经历:HttpClient 死锁
  4. websphere部署项目报Result Maps collection already contains value for XXX
  5. Mikrotik RouterOS 日常问题解析 ROS 5.4下载
  6. django-celery使用
  7. tensorflow学习笔记:tf.data.Dataset,from_tensor_slices(),shuffle(),batch()的用法
  8. python中数据用折线图表示_用python处理文本数据
  9. mysql定时导入_MySQL导入、导出、数据库定时备份
  10. C# 代码生成器 (存储过程生成方法)
  11. linux的vim编辑器,强大的Vim 编辑器
  12. 深入理解Tomcat 6和Tomcat7的区别
  13. Silverlight游戏设计(Game Design):(十四)练习用游戏素材资源的获取及相关工具使用心得...
  14. java小游戏实战局域网联机_结对编程3——黄金点小游戏实现局域网联机
  15. mysql 公历变农历_巧用SQL函数让公历变农历
  16. MATLAB图像变换四
  17. 由于之前的错误,Context[]启动失败(SSM)
  18. 【c#】服务端客户端连接类
  19. 内存卡弹出使用驱动器中的光盘之前需要将其格式化实测解决教程
  20. 【软件测试】白盒测试方法与黑盒测试方法的区别

热门文章

  1. 角点检测的几种基本方法
  2. Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略
  3. python数据处理--按照数据差值大小进行聚类(归类)
  4. WooCommerce API Keys的生成和保存机制
  5. 【论文笔记】基于范围的有障碍最近邻查询(RONN)
  6. java-常量和变量
  7. 国外问卷调查入门教程
  8. IOS系统历届版本大回顾(iOS7)
  9. Kubernetes HPA 动态弹性扩缩容
  10. 用python实现csdn博主全部博文下载,html转pdf,有了学习的电子书了。。。(附源码)