824. 山羊拉丁文

110 阅读1分钟

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

一、题目描述

给你一个由若干单词组成的句子 sentence ,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。

请你将句子转换为 “山羊拉丁文(Goat Latin)”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。山羊拉丁文的规则如下:

如果单词以元音开头('a', 'e', 'i', 'o', 'u'),在单词后添加"ma"。 例如,单词 "apple" 变为 "applema" 。 如果单词以辅音字母开头(即,非元音字母),移除第一个字符并将它放到末尾,之后再添加"ma"。 例如,单词 "goat" 变为 "oatgma" 。 根据单词在句子中的索引,在单词最后添加与索引相同数量的字母'a',索引从 1 开始。 例如,在第一个单词后添加 "a" ,在第二个单词后添加 "aa" ,以此类推。 返回将 sentence 转换为山羊拉丁文后的句子。

 

示例 1:

输入:sentence = "I speak Goat Latin" 输出:"Imaa peaksmaaa oatGmaaaa atinLmaaaaa" 示例 2:

输入:sentence = "The quick brown fox jumped over the lazy dog" 输出:"heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa"  

提示:

1 <= sentence.length <= 150 sentence 由英文字母和空格组成 sentence 不含前导或尾随空格 sentence 中的所有单词由单个空格分隔

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/go…

二、解题思路

理解题意

  1. 定义元音字母集合

  2. 对句子拆分为列表进行遍历,根据word[0]是否为元音,按照题目规则进行相应的变换 具体做法: 将元音加入哈希集合后,我们就可以通过判断字符在不在哈希集合中来判断其是否是元音字母
    如果首字母是元音,则endAddBuilder加上"ma"
    否则endAddBuilder加上其首字母和"ma"
    在判断完当前单词后,我们将根据单词数量wordNum来对尾随'a'的数量进行判断
    在循环后对未处理的字符串sentence(i,j)的字符串拼接进目标字符串sb
    最后返回sb的字符串形式

三、AC代码


class Solution {
   public String toGoatLatin(String sentence) {
       Set<Character> set=new HashSet<Character>();
       StringBuilder sb=new StringBuilder("");
       int wordNum=1;//记录单词个数
       set.add('a');
       set.add('e');
       set.add('i');
       set.add('o');
       set.add('u');
       set.add('A');
       set.add('E');
       set.add('I');
       set.add('O');
       set.add('U');
       for(int i=0;i<sentence.length();i++)
       {
           StringBuilder endAddBuilder=new StringBuilder("");
           if(set.contains(sentence.charAt(i)))
           {
               endAddBuilder.append("ma");
           }else
           {
               endAddBuilder.append(sentence.charAt(i)+"ma");
               i++;
           }
           int j=i;
           while(j<sentence.length()&&sentence.charAt(j)!=' ')
           {
               j++;
           }
           for(int k=0;k<wordNum;k++)
           {
               endAddBuilder.append('a');
           }
           sb.append(sentence.substring(i,j)+endAddBuilder);
           i=j;
           if(i<sentence.length())
           {
               sb.append(' ');
           }
           wordNum++;//单词数+1
       }
       return sb.toString();
   }
}

四、总结

写题解不易,若对你有帮助,点赞评论再走吧。ヽ(✿゚▽゚)ノ,如有不足,请大家斧正。