算法题:反转字符串中的单词

📅 发布时间:2026/7/9 7:28:44 👁️ 浏览次数:
算法题:反转字符串中的单词
题目描述思路分析我们可以通过双指针法来解决这个问题具体思路如下去除首尾空格字符串的首尾可能会有不必要的空格我们首先通过trim()方法去掉字符串两端的空格避免影响后续操作。倒序遍历字符串我们从字符串的右端开始倒序遍历使用两个指针i和j来记录当前单词的边界。i用来遍历字符串的每个字符。j用来标记当前单词的右边界当遇到空格时j位置就是一个单词的结束位置。找到单词每当遇到空格时说明一个单词已经结束。我们可以通过substring(i 1, j 1)来提取出当前的单词并将其添加到结果字符串中。在处理每个单词时我们还需要跳过所有的空格直到找到下一个单词。拼接单词反转过程中将单词添加到结果StringBuilder中单词之间使用一个空格隔开。最后我们返回拼接好的字符串。去除尾部多余的空格最后我们使用trim()方法去除返回结果中的尾部空格确保结果是规范的。代码class Solution { public String reverseWords(String s) { s s.trim(); // 去除首尾空格 int i s.length() - 1; // i 指向字符串的最后一个字符 int j i; // j 用于记录当前单词的右边界 StringBuilder a new StringBuilder(); // 使用 StringBuilder 存储结果 // 倒序遍历字符串 while (i 0) { if (i 0) { // 处理最后一个单词只有一个字符时直接加入到结果中 a.append(s.substring(i, j 1)); } if (s.charAt(i) ! ) { // 如果当前位置不是空格继续向左走寻找当前单词的左边界 i--; } else { // 如果遇到空格说明一个单词结束了 a.append(s.substring(i 1, j 1)); // 将当前单词加入结果 a.append( ); // 添加空格分隔单词 // 跳过所有空格 while (s.charAt(i) ) { i--; } // 更新 j 为新的单词的右边界 j i; } } return a.toString().trim(); // 返回结果字符串去除尾部空格 } }注意需要注意的是当i0时此时s.charAt(i)是不为空的所以循环中i会--导致退出循环这样会丢失s中的第一个单词所以在循环开始前需要处理i0的情况。if (i 0) { // 处理最后一个单词只有一个字符时直接加入到结果中 a.append(s.substring(i, j 1)); }