美文网首页DSAA
【算法】单词&句子反转

【算法】单词&句子反转

作者: jiantaocd | 来源:发表于2018-02-18 18:06 被阅读18次

有道算法题是“单词反转”,闲着没事就撸一把,动动脑~
此题有两种理解:1. 将输入字符串按字符反转输出。2. 将句子以单词为最小单位(空格区分)反转输出。
举个栗子,直观点。

输入字符串: i am a coder.
理解1,输出:.redoc a ma i
理解2,输出:.coder a am i

直接贴代码吧

// 题目: 单词反转
    public static void main(String[] args) {
        // 字符反转思路:1. 反向遍历输出 2. 利用对称性遍历一半。
        // 反转句子但不反转其中单词思路:首先剔除前后多余空格,然后反转整个句子,最后遍历反转每个单词。

        String str = "abcdef";
        String sen = " i am a student dfdkfj";

        ReverseWord reverseWord = new ReverseWord();
        String ret = reverseWord.reverseTwo(str);
        System.out.println(ret);
        System.out.println(reverseWord.reverseSentence(sen));
    }

    /**
     * 字符反转方式1
     *
     * @param originStr
     * @return
     */
    private String reverseOne(String originStr) {
        if (originStr == null || originStr.isEmpty()) {
            return originStr;
        }
        final int length = originStr.length();

        StringBuilder sBuilder = new StringBuilder(length);
        for (int i = length - 1; i >= 0; i--) {
            sBuilder.append(originStr.charAt(i));
        }
        return sBuilder.toString();
    }

    /**
     * 字符反转方式1
     *
     * @param originStr
     * @return
     */
    private String reverseTwo(String originStr) {
        if (originStr == null || originStr.isEmpty()) {
            return originStr;
        }
        final int length = originStr.length();
        char[] chars = originStr.toCharArray();
        final int halfLen = length / 2;
        for (int i = 0; i < halfLen; i++) {
            char temp = chars[i];
            chars[i] = chars[length - 1 - i];
            chars[length - 1 - i] = temp;
        }
        return new String(chars);
    }

    /**
     * 反转句子
     * @param sentence
     * @return
     */
    private String reverseSentence(String sentence) {
        if (sentence == null || sentence.isEmpty()) {
            return sentence;
        }

        sentence = sentence.trim();
        String[] strings = sentence.split(" ");
        int halfLen = strings.length / 2;
        for (int i = 0; i < halfLen; i++) {
            String temp = strings[i];
            strings[i] = strings[strings.length - 1 - i];
            strings[strings.length - 1 - i] = temp;
        }

        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < strings.length; i++) {
            stringBuilder.append(strings[i]);
            stringBuilder.append(" ");
        }
        return stringBuilder.toString();
    }

写完了,思路在注释里。但总觉得实现有待优化,特别是反转句子的实现,感觉使用了sentence.split(" "),正则匹配较耗时,有好的解题思路还请指教,欢迎浏览交流~

相关文章

  • 【算法】单词&句子反转

    有道算法题是“单词反转”,闲着没事就撸一把,动动脑~此题有两种理解:1. 将输入字符串按字符反转输出。2. 将句子...

  • 反转句子的单词

    反转单词:把一个句子中的单词进行反转,如'how are you' --> 'you are how' 思路:两次...

  • 算法面试题

    反转一个英文句子里面的所有单词。如:i am a boy 反转成:i ma a yob

  • 反转句子

    题目:给你一个句子(只包含字母和空格),将句子中的单词位置反转,单词用空格分割,单词之间只有一个空格,前后没有空格...

  • 【python】如何实现单词反转?

    题目:把一个句子中的单词进行反转,例如“how are you”变为“you are how”。 分析:对字符串进...

  • 学习篇:新闻摘要提取算法

    新闻摘要内容提取的算法如下: 1.按照算法对文本中的单词计算重要性,将符合阈值的设为关键字 2.按照句子中单词的重...

  • 151、反转字符串中的单词 | 算法(leetcode,附思维导

    零 标题:算法(leetcode,附思维导图 + 全部解法)300题之(151)反转字符串中的单词 一 题目描述 ...

  • 算法&单链表反转(三)

    主要介绍链表的简单用法以及单链表反转。网上的实现有很多,使用 OC/C 来实现的没有几个。 一、链表的基本用法 链...

  • 大型互联网公司android面试题(转载)

    第一面 1 手写算法题。 猫扑素数;1到n,求1的个数;单词反转;不会太难,主要考察你的代码规范,算法题基本会在第...

  • 算法合集

    JavaScript版数据结构与算法 javascript反转字符串中的单词JavaScript计数二进制子串Ja...

网友评论

    本文标题:【算法】单词&句子反转

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