## 824. Goat Latin

A sentence `S` is given, composed of words separated by spaces. Each word consists of lowercase and uppercase letters only.

We would like to convert the sentence to "Goat Latin" (a made-up language similar to Pig Latin.)

The rules of Goat Latin are as follows:

• If a word begins with a vowel (a, e, i, o, or u), append `"ma"` to the end of the word.
For example, the word 'apple' becomes 'applema'.

• If a word begins with a consonant (i.e. not a vowel), remove the first letter and append it to the end, then add `"ma"`.
For example, the word `"goat"` becomes `"oatgma"`.

• Add one letter `'a'` to the end of each word per its word index in the sentence, starting with 1.
For example, the first word gets `"a"` added to the end, the second word gets `"aa"` added to the end and so on.

Return the final sentence representing the conversion from `S` to Goat Latin.

Example 1:

```Input: "I speak Goat Latin"
Output: "Imaa peaksmaaa oatGmaaaa atinLmaaaaa"
```

Example 2:

```Input: "The quick brown fox jumped over the lazy dog"
Output: "heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa"
```

Notes:

• `S` contains only uppercase, lowercase and spaces. Exactly one space between each word.
• `1 <= S.length <= 150`.

## Rust Solution

``````struct Solution;

#[allow(clippy::wrong_self_convention)]
impl Solution {
fn to_goat_latin(s: String) -> String {
let words: Vec<&str> = s.split_whitespace().map(|s| s.chars().as_str()).collect();
let mut res: String = "".to_string();
let mut n = 1;
for word in words {
if n > 1 {
res += " ";
}
match &word[0..1] {
"a" | "e" | "i" | "o" | "u" | "A" | "E" | "I" | "O" | "U" => {
res += word;
}
_ => {
res += &word[1..];
res += &word[0..1];
}
}
res += "ma";
for _ in 0..n {
res += "a";
}
n += 1;
}
res
}
}

#[test]
fn test() {
let s = "I speak Goat Latin".to_string();
let res = "Imaa peaksmaaa oatGmaaaa atinLmaaaaa".to_string();
assert_eq!(Solution::to_goat_latin(s), res);
let s = "The quick brown fox jumped over the lazy dog".to_string();
let res = "heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa".to_string();
assert_eq!(Solution::to_goat_latin(s), res);
}
``````

Having problems with this solution? Click here to submit an issue on github.