编程语言
首页 > 编程语言> > java算法题-山羊拉丁文

java算法题-山羊拉丁文

作者:互联网

在leetcode(https://leetcode-cn.com/)上看到一道有趣的算法题:

给定一个由空格分割单词的句子 S。每个单词只包含大写或小写字母。

我们要将句子转换为 “Goat Latin”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。

山羊拉丁文的规则如下:

返回将 S 转换为山羊拉丁文后的句子。

示例 1:

输入: “I speak Goat Latin”

输出: “Imaa peaksmaaa oatGmaaaa atinLmaaaaa”

示例 2:

输入: “The quick brown fox jumped over the lazy dog”

输出: “heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa
hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa”

说明:

这样的题你会怎么用java实现呢?

分享一下我的解题思路:

public String toGoatLatin(String S) {
        StringBuffer buffer = new StringBuffer();
        String[] array = S.split(" ");
        for (int i = 0, length = array.length; i < length; i++) {
            if (startsWithVowel(array[i])) {
                /*以元音开头*/
                buffer.append(array[i]).append("ma");
            } else {
                /*以辅音字母开头*/
                int childLength = array[i].length();
                if (childLength > 1) {
                    buffer.append(array[i].substring(1, childLength))
                            .append(array[i].charAt(0))
                            .append("ma");
                } else {
                    buffer.append(array[i])
                            .append("ma");
                }

            }
            buffer.append(getJoinStr(i+1, "a"));
            if(i<length-1){
                buffer.append(" ");
            }
        }
        return buffer.toString();
    }

    /**
     * 判断s是否以元音(a, e, i, o, u)开头
     */
    private boolean startsWithVowel(String s) {
        return s.toLowerCase().startsWith("a")
                        || s.toLowerCase().startsWith("e")
                        || s.toLowerCase().startsWith("i")
                        || s.toLowerCase().startsWith("o")
                        || s.toLowerCase().startsWith("u");
    }

    /**
     * 返回对应数量字符串拼接起来的字符串
     */
    private String getJoinStr(int num, String s) {
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < num; i++) {
            buffer.append(s);
        }
        return buffer.toString();
    }

结果:

输入:“I speak Goat Latin” 输出:“Imaa peaksmaaa oatGmaaaa atinLmaaaaa”

leetcode上对该答案的分析如下:

99 / 99 个通过测试用例

状态:通过

执行用时: 3 ms

内存消耗: 38.5 MB

执行用时分布图表 在这里插入图片描述
执行消耗内存分布图表 在这里插入图片描述

大家有更好的解题思路吗?欢迎在评论区作答哈~
有问题也可发送至:1966353889@qq.com
欢迎交流,共同进步。

标签:java,String,buffer,拉丁文,单词,算法,array,append,toLowerCase
来源: https://blog.csdn.net/qq_33866343/article/details/115767041