一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情。
山羊拉丁文
题目如下图所示,也可以在LeetCode题目中找到此题。
题目解析
题目提供素材
根据题目描述来看,素材只有一个。
- 一个由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的原因。
再优化一下
因为第一次的提交,排名不理想,所以又看了一下代码。
发现拼接字符串可以再优化优化,大概优化成下面的代码。
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);
}
确实快了一些。