返回介绍

44.翻转单词顺序序列

发布于 2023-08-30 21:54:39 字数 1459 浏览 0 评论 0 收藏 0

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

思路:1、split。

public class Solution {
  public String ReverseSentence(String str) {
    String[] array = str.split(" ");
    if(array.length == 0) return str;
    StringBuilder sb = new StringBuilder();
    for(int i = array.length-1; i > 0; i--){
      sb.append(array[i]).append(" ");
    }
    sb.append(array[0]);
    return sb.toString();
  }
}

2、原地翻转,先整体翻转,然后每个单词进行翻转

public class Solution {
  public String ReverseSentence(String str) { 
    if (str == null || str.trim().length() == 0) return str;
    char[] chars = str.toCharArray();
    reverseChars(chars, 0, str.length() - 1);
    // 利用滑动窗口
    // 遇到' '执行翻转
    int l = 0;
    int r = 0;
    while (l < str.length()) {
      if (chars[r] == ' ') {
        reverseChars(chars, l, r - 1);
        // 交换完之后,一起跳过' '
        r++;
        l = r;
      }
      if (r == str.length() - 1) {
        reverseChars(chars, l, r);
        // 到了最后交换玩就break,否则r会出现越界,可以在while中加对r的判断
        break;
      }
      r++;
    }
    return String.valueOf(chars);
  }
  private void reverseChars(char[] chars, int l, int r) {
    while (l < r) {
      char temp = chars[l];
      chars[l] = chars[r];
      chars[r] = temp;
      l++;
      r--;
    }
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文