返回介绍

solution / 0800-0899 / 0824.Goat Latin / README

发布于 2024-06-17 01:03:34 字数 4012 浏览 0 评论 0 收藏 0

824. 山羊拉丁文

English Version

题目描述

给你一个由若干单词组成的句子 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 中的所有单词由单个空格分隔

解法

方法一

class Solution:
  def toGoatLatin(self, sentence: str) -> str:
    ans = []
    for i, word in enumerate(sentence.split()):
      if word.lower()[0] not in ['a', 'e', 'i', 'o', 'u']:
        word = word[1:] + word[0]
      word += 'ma'
      word += 'a' * (i + 1)
      ans.append(word)
    return ' '.join(ans)
class Solution {
  public String toGoatLatin(String sentence) {
    List<String> ans = new ArrayList<>();
    Set<Character> vowels
      = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'));
    int i = 1;
    for (String word : sentence.split(" ")) {
      StringBuilder t = new StringBuilder();
      if (!vowels.contains(word.charAt(0))) {
        t.append(word.substring(1));
        t.append(word.charAt(0));
      } else {
        t.append(word);
      }
      t.append("ma");
      for (int j = 0; j < i; ++j) {
        t.append("a");
      }
      ++i;
      ans.add(t.toString());
    }
    return String.join(" ", ans);
  }
}
function toGoatLatin(sentence: string): string {
  return sentence
    .split(' ')
    .map((s, i) => {
      let startStr: string;
      if (/[aeiou]/i.test(s[0])) {
        startStr = s;
      } else {
        startStr = s.slice(1) + s[0];
      }
      return `${startStr}ma${'a'.repeat(i + 1)}`;
    })
    .join(' ');
}
use std::collections::HashSet;
impl Solution {
  pub fn to_goat_latin(sentence: String) -> String {
    let set: HashSet<&char> = ['a', 'e', 'i', 'o', 'u'].into_iter().collect();
    sentence
      .split_whitespace()
      .enumerate()
      .map(|(i, s)| {
        let first = char::from(s.as_bytes()[0]);
        let mut res = if set.contains(&first.to_ascii_lowercase()) {
          s.to_string()
        } else {
          s[1..].to_string() + &first.to_string()
        };
        res.push_str("ma");
        res.push_str(&"a".repeat(i + 1));
        res
      })
      .into_iter()
      .collect::<Vec<String>>()
      .join(" ")
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文