其他分享
首页 > 其他分享> > 字符串题目:山羊拉丁文

字符串题目:山羊拉丁文

作者:互联网

文章目录

题目

标题和出处

标题:山羊拉丁文

出处:824. 山羊拉丁文

难度

2 级

题目描述

要求

给定一个由空格分割单词的句子 sentence \texttt{sentence} sentence。每个单词只包含大写或小写字母。

我们要将句子转换为「山羊拉丁文」(一种类似于「猪拉丁文」的虚构语言)。

山羊拉丁文的规则如下:

返回将 sentence \texttt{sentence} sentence 转换为山羊拉丁文后的句子。

示例

示例 1:

输入: sentence   =   "I   speak   Goat   Latin" \texttt{sentence = "I speak Goat Latin"} sentence = "I speak Goat Latin"
输出: "Imaa   peaksmaaa   oatGmaaaa   atinLmaaaaa" \texttt{"Imaa peaksmaaa oatGmaaaa atinLmaaaaa"} "Imaa peaksmaaa oatGmaaaa atinLmaaaaa"

示例 2:

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

数据范围

解法

思路和算法

由于给定的字符串 sentence \textit{sentence} sentence 由空格分隔每个单词,因此首先需要得到字符串 sentence \textit{sentence} sentence 中的每个单词。在 Java 中, String \texttt{String} String 类型有 split \texttt{split} split 方法,将字符串根据指定的分隔符分隔成字符串数组。这道题中,将字符串 sentence \textit{sentence} sentence 根据空格分隔成字符串数组,则字符串数组中的每个元素都是一个单词。

得到每个单词以后,即可将句子中的每个单词转换成山羊拉丁文。

将每个单词转换成山羊拉丁文的操作如下:

  1. 判断单词的首字母,如果首字母是元音字母则不做任何改变,如果首字母是辅音字母则将首字母从单词头部移到单词尾部;

  2. 在单词的后面添加 “ma" \text{``ma"} “ma";

  3. 对于数组下标为 i i i 的单词,在单词的后面添加 i + 1 i + 1 i+1 个 “a" \text{``a"} “a"。

由于涉及到字符串的修改和拼接操作,因此使用 StringBuffer \texttt{StringBuffer} StringBuffer 类型。具体而言,创建 StringBuffer \texttt{StringBuffer} StringBuffer 类型的变量 goatLatin \textit{goatLatin} goatLatin 存储最终生成的山羊拉丁文,对于数组中的每个单词,分别创建一个 StringBuffer \texttt{StringBuffer} StringBuffer 类型的变量存储该单词的山羊拉丁文表示,然后将山羊拉丁文表示拼接到 goatLatin \textit{goatLatin} goatLatin 的末尾。

在拼接 goatLatin \textit{goatLatin} goatLatin 时,需要注意单词之间有空格,因此除了最后一个单词以外,在拼接每个单词时之后都需要加上一个空格。

代码

class Solution {
    public String toGoatLatin(String sentence) {
        StringBuffer goatLatin = new StringBuffer();
        String[] array = sentence.split(" ");
        int length = array.length;
        for (int i = 0; i < length; i++) {
            String word = array[i];
            StringBuffer sb = new StringBuffer();
            if (isVowel(word.charAt(0))) {
                sb.append(word);
            } else {
                sb.append(word.substring(1));
                sb.append(word.charAt(0));
            }
            sb.append("ma");
            for (int j = 0; j <= i; j++) {
                sb.append('a');
            }
            goatLatin.append(sb);
            if (i < length - 1) {
                goatLatin.append(' ');
            }
        }
        return goatLatin.toString();
    }

    public boolean isVowel(char c) {
        return c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' || c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
    }
}

复杂度分析

标签:sentence,StringBuffer,拉丁文,texttt,单词,goatLatin,字符串,山羊
来源: https://blog.csdn.net/stormsunshine/article/details/120098491