Leetcode——824.山羊拉丁文——题解+代码实现

一、题目


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

我们要将句子转换为 “Goat Latin”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。

山羊拉丁文的规则如下:

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

返回将 S 转换为山羊拉丁文后的句子。

示例 1:

输入: "I speak Goat Latin"
输出: "Imaa peaksmaaa oatGmaaaa atinLmaaaaa"

示例 2:

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

说明:

  • S 中仅包含大小写字母和空格。单词间有且仅有一个空格。
  • 1 <= S.length <= 150

二、题解思路


  • 题解思路:先将字符串变成字符串数组,然后遍历字符串数组,按山羊拉丁文规则改变每个字符串数组中的元素(即单词)再次遍历字符串数组,将每个单词以空格为间隔串起来生成要输出的字符串。

三、代码实现


  • C++代码实现
class Solution {
public:
    string toGoatLatin(string S) 
    {
        vector<string> nums;
        S += " ";               //将原字符串S最后加一个空格
        string temp = "";       //定义一个字符串,用来存每个单词
        for(int i = 0;i<S.size();i++)   //遍历S字符串
        {
            if(S[i] != ' ')          //如果没有遇到空格
                temp += S[i];
            else                     //遇到了空格
            {
                nums.push_back(temp);  //将单词存入nums中
                temp = "";
            }
        }
        
        for(int i = 0;i<nums.size();i++)   //遍历nums中的每个单词,根据山羊拉丁文规则进行判断修改单词
        {
            if(nums[i][0]=='a' || nums[i][0]=='e' || nums[i][0]=='i' || nums[i][0]=='o' || nums[i][0]=='u' || nums[i][0]=='A' || nums[i][0]=='E' || nums[i][0]=='I' || nums[i][0]=='O' || nums[i][0]=='U')
            {
                nums[i] = nums[i] + "ma";    //将ma加在单词后
                for(int j = 0;j<i+1;j++)     //再在单词后面加i+1个a
                {
                    nums[i] += "a";
                }
            }
            else              //非元音字母开头
            {
                int temp1 = nums[i][0];  //记录第一个字母
                for(int j = 0;j<nums[i].size()-1;j++)  //将单词中每个字母(从第二个开始)向前移动一位
                {
                    nums[i][j]=nums[i][j+1];
                }
                nums[i][nums[i].size()-1]=temp1;  //将第一个字母放在单词最后
                nums[i] = nums[i] + "ma";
                for(int j = 0;j<i+1;j++)
                {
                    nums[i] += "a";
                }
            }
        } 
        string word_result = "";                  //存最后结果的字符串
        for(int i = 0;i<nums.size();i++)
        {
           word_result += nums[i] +" ";      //每个单词后加一个空格依次放到字符串word_result中,这样最后就会多一个空格
        }
        int count = word_result.size()-1;    //填充完毕后的word_result字符串长度减一
        word_result.resize(count);           //改变word_result的大小(去掉最后一个空格)
        return word_result;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值