LeetCode刷题记录(十九):山羊拉丁文

147 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

山羊拉丁文

题目如下图所示,也可以在LeetCode题目中找到此题。

image.png

题目解析

题目提供素材

根据题目描述来看,素材只有一个。

  1. 一个由1个或多个单词组成的英文短句。

注:不会超过150个单词,最少有一个单词。

我的解读

解读这道题,主要就是弄明白其中的规则,也就是山羊拉丁文是什么?如何转换。

首先,山羊拉丁文是不存在的,只是这道题虚拟出来的一个概念。

其次,一个单词如果要转换成山羊拉丁文,有三种转换规则。

一,单词以元音字母开头,不论大小写,将当前单词后面追加ma字符串。

二,如果不是以元音字母开头,则将单词的第一位数字挪到最后一位,然后在追加ma字符串。

三,在短句中,根据单词的顺序,依次追加顺序的a字母。

三种规则,第一种和第二种根据是否元音字母开头的情况选择满足其一,第三种必须满足。

解题思路

解题思路就比较简单了,循环所有单词,并且将每个单词进行首字母的比对,随后根据对比结果做出不一样的操作即可。

比较简单,可以看一下下面的代码。

代码

class Solution {

    public String toGoatLatin(String sentence) {
        StringBuilder result = new StringBuilder();
        String[] sentences = sentence.split(" ");
        StringBuilder a = new StringBuilder("a");
        for (String s : sentences) {
            String k = s.substring(0, 1);
            if("aeiouAEIOU".contains(k)){
                s = s + "ma";
            }else{
                s = s.substring(1) + k + "ma";
            }
            result.append(s).append(a).append(" ");
            a.append("a");
        }
        return result.substring(0, result.length()-1);
    }
}

执行结果

今天的执行结果依然有完善空间,执行时间太长,可能是因为使用了多次substring的原因。

image.png

再优化一下

因为第一次的提交,排名不理想,所以又看了一下代码。

发现拼接字符串可以再优化优化,大概优化成下面的代码。

public String toGoatLatin(String sentence) {
    StringBuilder result = new StringBuilder();
    String[] sentences = sentence.split(" ");
    StringBuilder a = new StringBuilder("a");
    for (String s : sentences) {
        String k = s.substring(0, 1);
        if(!"aeiouAEIOU".contains(k)){
            s = s.substring(1) + k;
        }
        result.append(s).append("ma").append(a).append(" ");
        a.append("a");
    }
    return result.substring(0, result.length()-1);
}

image.png

确实快了一些。