每日算法练习:LeetCode 151. 反转字符串中的单词 ✅
大家好我是你们的算法小伙伴。今天我们来练习一道字符串处理的经典中等题 ——LeetCode 151. 反转字符串中的单词。这道题考察对空格和单词边界的处理是面试中高频的字符串操作题。题目描述给你一个字符串s请你反转字符串中单词的顺序。单词是由非空格字符组成的字符串。s中使用至少一个空格将单词分隔开。返回单词顺序颠倒且单词之间用单个空格连接的结果字符串。注意输入字符串s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中单词间应当仅用单个空格分隔且不包含任何额外的空格。示例 1输入s the sky is blue 输出blue is sky the示例 2输入s hello world 输出world hello 解释反转后的字符串中不能存在前导空格和尾随空格。示例 3输入s a good example 输出example good a 解释如果两个单词间有多余的空格反转后的字符串需要将单词间的空格减少到仅有一个。解题思路核心思路拆分 → 反转 → 拼接拆分单词将原字符串按空格分割自动过滤掉空字符串处理多余空格。反转单词顺序将拆分得到的单词列表逆序排列。重新拼接用单个空格将逆序后的单词列表拼接成结果字符串。这种方法在 Java 中实现简洁且能自动处理所有空格问题。代码实现class Solution { public String reverseWords(String s) { // 1. 按空格分割字符串自动过滤空字符串处理多余空格 String[] words s.trim().split(\\s); // 2. 反转单词顺序 StringBuilder sb new StringBuilder(); for (int i words.length - 1; i 0; i--) { sb.append(words[i]); // 最后一个单词后不加空格 if (i ! 0) { sb.append( ); } } return sb.toString(); } }代码详解结合示例 2 模拟示例 2s hello world s.trim()去除首尾空格 →hello world.split(\\s)按一个或多个空格分割得到单词数组 →[hello, world]逆序拼接先加world再加空格再加hello不加空格结果 →world hello与示例一致进阶原地解法O (1) 额外空间Java 需转成字符数组class Solution { public String reverseWords(String s) { char[] chars s.toCharArray(); int n chars.length; // 1. 反转整个字符串 reverse(chars, 0, n - 1); // 2. 反转每个单词 int start 0; for (int i 0; i n; i) { if (chars[i] ) { reverse(chars, start, i - 1); start i 1; } } // 反转最后一个单词 reverse(chars, start, n - 1); // 3. 清理多余空格 StringBuilder sb new StringBuilder(); for (char c : chars) { if (c ! ) { sb.append(c); } else if (!sb.isEmpty() sb.charAt(sb.length() - 1) ! ) { sb.append( ); } } // 去除末尾可能的空格 if (!sb.isEmpty() sb.charAt(sb.length() - 1) ) { sb.deleteCharAt(sb.length() - 1); } return sb.toString(); } // 辅助函数反转字符数组的 [l, r] 区间 private void reverse(char[] chars, int l, int r) { while (l r) { char temp chars[l]; chars[l] chars[r]; chars[r] temp; l; r--; } } }复杂度分析方法时间复杂度空间复杂度拆分反转拼接O(n)O (n)存储单词数组原地解法O(n)O (1)仅使用常数级额外空间总结核心技巧利用split(\\s)自动处理多余空格再逆序拼接代码简洁高效。进阶思路原地反转整个字符串后再逐个反转单词实现 O (1) 额外空间适合面试时展示更优的算法思维。边界处理自动处理前导、尾随、单词间多余空格保证结果字符串格式正确。这道题是字符串处理的经典题掌握这两种思路就能轻松解决这类单词反转和空格清理的问题。今天的每日算法练习就到这里我们明天再见
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2462092.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!