美文网首页
面试题58_I_翻转单词顺序

面试题58_I_翻转单词顺序

作者: shenghaishxt | 来源:发表于2020-02-19 14:22 被阅读0次

题目描述

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。

题解一

按照空格切分字符串,这样每个单词就会存入到一个字符串数组中,然后再倒序拼接即可。

class Solution {
    public String reverseWords(String s) {
        // 使用正则表达式,去除多余的空格s
        s = s.trim().replaceAll(" +", " ");
        String[] strings = s.split(" ");
        StringBuilder sb = new StringBuilder();
        for (int i = strings.length - 1; i >= 0; i--) {
            sb.append(strings[i]).append(" ");
        }
        return sb.deleteCharAt(sb.length()-1).toString();
    }
}

题解二

但如果不允许使用JAVA的API的话,如果进行翻转呢?

我们可以通过两次翻转字符串来得到上面的结果。例如对于“student. a am I”,先翻转字符串内所有字符得到"I ma a .tneduts",再对每个单词中的字符顺序进行翻转,就得到了"I am a students."。

下面是参考代码:

class Solution {
    public String reverseWords(String s) {
        // 使用正则表达式,去除多余的空格s
        s = s.trim().replaceAll(" +", " ");
        // 先翻转整个字符串
        char[] chars = s.toCharArray();
        reverse(chars, 0, s.length()-1);
        // 翻转字符串中的每个单词
        int begin = 0, right = 0;
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == ' ') {
                reverse(chars, begin, i-1);
                begin = i + 1;
            }
        }
        // 最后一个单词单独处理
        reverse(chars, begin, chars.length-1);
        // 字符数组转化为字符串
        return String.valueOf(chars);
    }
    
    private void reverse(char[] chars, int left, int right) {
        if (left > right)
            return;
        while (left < right) {
            char temp = chars[left];
            chars[left++] = chars[right];
            chars[right--] = temp;
        }
    }
}

相关文章

  • 面试题58_I_翻转单词顺序

    题目描述 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。...

  • 剑指offer第二版-58.翻转单词顺序

    本系列导航:剑指offer(第二版)java实现导航帖 面试题58:翻转单词顺序 题目要求:输入一个英文句子,翻转...

  • 面试题58(剑指offer)--翻转字符串

    题目一: 翻转单词顺序。输入一个英文句子,翻转句子中单词的顺序,但单词内字符顺序不变。为简单起见,标点符号和普通字...

  • 面试题58 - I. 翻转单词顺序

    翻转单词顺序 题目描述 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通...

  • 翻转字符串

    题目:翻转单词顺序。 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字...

  • 翻转字符串

    题目一:翻转单词顺序。 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通...

  • 翻转单词顺序

    牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感...

  • 翻转单词顺序

    对cpp还是不熟啊,尤其是char, char*, char[]这块。 上边s1 是不能被修改的,s2可被修改。

  • 翻转单词顺序

    题目描述 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。...

  • 翻转单词顺序

网友评论

      本文标题:面试题58_I_翻转单词顺序

      本文链接:https://www.haomeiwen.com/subject/uhkafhtx.html