将句子编码为 Pig Latin

data structurec++programming更新于 2024/11/15 18:12:00

在这个问题中,我们将句子转换为 Pig Latin。我们可以将每个单词的第一个字符附加在最后,然后在其后附加"ay"。

我们将看到将给定句子转换为 Pig Latin 的三种方法。逻辑是,我们可以将第一个字符附加在末尾,然后从字符串中删除。之后,我们可以将"ay"附加到单词。

问题陈述 – 我们给出了一个包含多个单词的字符串 alpha。我们需要将字符串编码为 Pig Latin。

注意 – Pig Latin 是一种单词加密技术,它对单词进行一次左旋转,并在字符串末尾附加"ay"。

示例

输入

alpha = "Welcome to the tutorialspoint!";

输出

elcomeWay otay hetay utorialspoint!tay

解释 – 我们将字符串中的每个单词转换为 Pig Latin。

  • • Welcome -> elcomeWay

  • • to -> otay

  • • the -> hetay

  • • tutorialspoint! -> utorialspoint!tay

输入

alpha = 'How are you'

输出

owHay reaay ouyay

解释 – 字符串转换为 Pig Latin。

方法 1

在此方法中,我们将使用 substr() 方法获取字符串中的特定单词。之后,我们将在字符串末尾附加第一个字符和"ay"。

算法

步骤 1 – 初始化"res"变量以存储结果字符串。

步骤 2 – 开始迭代字符串,并使用"p"初始化"q"变量。

步骤 3 – 如果 p 大于字符串长度,则中断循环。

步骤 4 – 使用 while 循环增加"p"的值,直到我们得到空格字符并且 p 小于字符串长度。

步骤 5 – 使用 substr() 方法获取从"q + 1"索引开始且长度等于"p – q – 1"的子字符串。另外,在末尾附加第一个字符和"ay"。

步骤 6 – 如果"res"字符串的长度为 0,则将 Pig Latine 附加到"res"。否则,将空格和 Pig Latin 附加到结果中。

步骤 7 – 返回"res"字符串。

示例

#include <bits/stdc++.h>
using namespace std;

string encryptString(string alpha) {
    string res = "";
    // 遍历字符串
    for (int p = 0; p < alpha.length(); p++) {
    int q = p;
    // 如果 p 大于或等于 alpha 长度。
    if (p >= alpha.length())
    break;
    // 从字符串中取出一个单词
    while (p < alpha.length() && alpha[p] != ' ')
        p++;
        // 对于第一个单词
        if (res.length() == 0) {
        // 将第一个字符放在最后,并附加 'ay'。
            res.append(alpha.substr(q + 1, p - q - 1) + alpha[q] + "ay");
        } else // 对于其他单词
        {
            res.append(" " + alpha.substr(q + 1, p - q - 1) + alpha[q] + "ay");
        }
    }
    return res;
}
int main() {
    string alpha = "Welcome to the tutorialspoint!";
    cout << "The Pig Latin encrypted string is - " << (encryptString(alpha));
    return 0;
}

输出

The Pig Latin encrypted string is - elcomeWay otay hetay utorialspoint!tay

时间复杂度 – O(N*M),其中 N 是字符串长度,M 是获取子字符串的最大字长。

空间复杂度 – O(N) 用于存储 Pig Latin。

方法 2

在这种方法中,我们优化了第一种方法的代码。在这种方法中,我们将在遍历字符串时获取给定字符串的每个单词,而不使用 substr() 方法,并将每个单词转换为 Pig Latin。

算法

步骤 1 – 初始化"temp"和"res"字符串。

步骤 2 – 遍历字符串时,如果获取到字符,则将其附加到"temp"字符串。

步骤 3 – 如果当前字符是空格,则访问"temp"字符串的第一个字符,并将其附加到自身。另外,将"ay"附加到"temp"字符串。

步骤 4 – 使用 eras() 方法从"temp"字符串中删除第一个字符。

步骤 5 – 重新初始化"temp"字符串。

步骤 6 – 处理字符串的最后一个单词。

步骤 7 – 返回"res"字符串。

示例

#include <bits/stdc++.h>
using namespace std;

string encryptString(string alpha) {
    string res = "";
    string temp = "";
    // 遍历字符串
    for (int p = 0; p < alpha.length(); p++) {
        // 如果发现空格
        if (alpha[p] == ' ') {
            // 编码为 Pig Latine
            temp = temp + temp[0];
            // 删除第一个字符
            temp.erase(temp.begin());
            // 在末尾添加 'ay'
            temp = temp + "ay ";
            res += temp;
            temp = "";
        } else // 对于其他字符
        {
            temp += alpha[p];
        }
    }
    // 处理最后一个单词
    temp = temp + temp[0];
    temp.erase(temp.begin());
    temp = temp + "ay ";
    res += temp;
    return res;
}
int main() {
    string alpha = "Welcome to the tutorialspoint";
    cout << "The Pig Latin encrypted string is - " << (encryptString(alpha));
    return 0;
}

输出

The Pig Latin encrypted string is - elcomeWay otay hetay utorialspointtay

时间复杂度 – 迭代字符串的复杂度为 O(N)。

空间复杂度 – 存储 Pig Latin 字符串的复杂度为 O(N)。

方法 3

在此方法中,我们将使用空格作为分隔符来拆分字符串,以获取字符串的所有单词。之后,我们将更新字符串的每个单词并将其附加到新字符串中。

算法

步骤 1 – 初始化"pig"字符串。

步骤 2 – 使用"stringstream"获取单词流。

步骤 3 – 开始遍历字符串流,并在每次迭代中获取一个单词。

步骤 4 – 使用 substr() 方法从单词中删除第一个字符,并将第一个字符附加在末尾。另外,最后附加"ay"。

步骤 5 – 将更新后的单词附加到"pig"字符串的末尾。

步骤 6 – 返回"pig"字符串。

示例

#include <bits/stdc++.h>
using namespace std;

string encryptString(string alpha) {
    string pig = "";
    // 用空格分割字符串
    stringstream words(alpha);
    string singleWord;
    // 获取每个单词
    while (words >> singleWord) {
        singleWord = singleWord.substr(1) + singleWord[0] + "ay";
        pig += singleWord + " ";
    }
    return pig;
}
int main() {
    string alpha = "Welcome to the tutorialspoint";
    cout << "The Pig Latin encrypted string is - " << (encryptString(alpha));
    return 0;
}

输出

The Pig Latin encrypted string is - elcomeWay otay hetay utorialspointtay

时间复杂度 – 遍历字符串的每个单词的复杂度为 O(N)。

空间复杂度 – 存储结果字符串的复杂度为 O(N)。

我们学习了将句子转换为 Pig Latin 的三种方法。第一种方法使用 substr() 方法更新单词,第二种方法使用临时字符串变量获取单词并更新它。第三种方法将字符串拆分为单词数组并更新每个单词。


相关文章