【算法】【线性表】【字符串】字符串中的单词反转
1 题目
你在与一位习惯从右往左阅读的朋友发消息,他发出的文字顺序都与正常相反但单词内容正确,为了和他顺利交流你决定写一个转换程序,把他所发的消息 message
转换为正常语序。
注意:输入字符串 message
中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
示例 1:
输入: message = "the sky is blue"
输出: "blue is sky the"
示例 2:
输入: message = " hello world! " 输出: "world! hello" 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: message = "a good example" 输出: "example good a" 解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
提示:
1 <= message.length <= 10^4
message
中包含英文大小写字母、空格和数字message
中至少有一个单词
2 解答
class Solution { public String reverseMessage(String message) { // 来个栈保存下字符串 Deque<String> deque = new ArrayDeque<>(); StringBuilder subBuilder = new StringBuilder(); for (int i = 0; i < message.length(); i++) { char c = message.charAt(i); if (c == ' ' ) { if (subBuilder.length() > 0) { deque.push(subBuilder.toString()); subBuilder.setLength(0); continue; } } else { subBuilder.append(c); } } // 最后一个添加进去 if (subBuilder.length() > 0) { deque.push(subBuilder.toString()); } StringBuilder res = new StringBuilder(); while (!deque.isEmpty()) { res.append(deque.pop() + " "); } if (res.length() > 0) { res.deleteCharAt(res.length() - 1); } return res.toString(); } }
加油。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了