博客
关于我
【leetcode-字符串】翻转字符串里的单词
阅读量:540 次
发布时间:2019-03-09

本文共 982 字,大约阅读时间需要 3 分钟。

今天我遇到了一个编程问题,需要在Java中实现一个函数,能够将一个字符串中的每个单词进行翻转。这个问题看起来不算太难,但需要注意一些细节,比如处理多余的空格以及保留或去掉空格。

首先,我需要理解题目的具体要求。题目中提到,无空格字符构成一个单词,这意味着像“hello”这样的单词不会有问题。但是如果有多个空格,比如“ word another”,这会被视为“word”和“another”两个单词。反转后的字符串应该将这些单词的顺序颠倒,并且在单词之间只保留一个空格,而不是多个。

接下来,我需要考虑如何处理输入字符串中的首尾空格。例如,输入可能是“ hello world! ”,那么反转后的字符串应该是“world! hello”。因此,我需要先处理这些首尾的空格,确保在反转后不会有多余的空格出现在开头或结尾。

为了实现这一点,我想到可以使用Java中的trim()方法来去除首尾空格。然后,将字符串分割成单词数组,这可以通过split(" ")方法来实现。需要注意的是,split(" ")方法会将多个空格分割后的结果中包含空字符串,但我需要过滤掉这些空字符串,只保留实际的单词。

接下来,我需要将单词数组反转,然后将每个单词添加到一个StringBuilder对象中。这一步需要注意的是,每个单词应该被trim()处理,以去除内部可能存在的空格,并且在添加时保留一个空格。

为了确保代码的正确性,我还需要考虑一些边界情况。例如,输入字符串为空,或者只有空格的情况。在这种情况下,函数应该返回一个空字符串,而不是带有空格的字符串。

在编写代码时,我需要确保处理所有这些情况,并且代码的效率尽可能高。由于问题要求使用O(1)额外空间复杂度的原地解法,这意味着我不能使用额外的数组或数据结构来存储单词,而是需要直接在原字符串上进行操作。然而,由于Java的字符串是不可变的,这种方法可能不太适用,因此可能需要使用StringBuilder来辅助操作。

在编写代码时,我还需要注意优化性能,避免不必要的计算和操作。例如,在反转单词顺序时,尽量减少循环的次数,或者利用更高效的方法来处理字符串。

最后,我需要测试代码,确保它能够正确处理各种情况,包括多余空格、首尾空格、单词内部空格等。同时,我还需要考虑代码的可读性和可维护性,确保其他开发者能够理解和修改代码。

转载地址:http://hahiz.baihongyu.com/

你可能感兴趣的文章
orm总结
查看>>
os.environ 没有设置环境变量
查看>>
os.path.join、dirname、splitext、split、makedirs、getcwd、listdir、sep等的用法
查看>>
os.removexattr 的 Python 文档——‘*‘(星号)参数是什么意思?
查看>>
os.system 在 Python 中不起作用
查看>>
OS2ATC2017:阿里研究员林昊畅谈操作系统创新与挑战
查看>>
OSCACHE介绍
查看>>
SQL--合计函数(Aggregate functions):avg,count,first,last,max,min,sum
查看>>
OSChina 周五乱弹 ——吹牛扯淡的耽误你们学习进步了
查看>>
SQL--mysql索引
查看>>
OSChina 周四乱弹 ——程序员为啥要买苹果手机啊?
查看>>
OSChina 周日乱弹 —— 2014 年各种奇葩评论集合
查看>>
OSChina 技术周刊第十期,每周技术抢先看!
查看>>
OSError: no library called “cairo-2“ was foundno library called “cairo“ was foundno library called
查看>>
OSError: [WinError 193] %1 不是有效的 Win32 应用程序。
查看>>
osgearth介绍
查看>>
OSGi与Maven、Eclipse PlugIn的区别
查看>>
Osgi环境配置
查看>>
OSG——选取和拖拽
查看>>
OSG中找到特定节点的方法(转)
查看>>