题目链接

快乐的字符串

题目描述

一个字符串是“快乐的”,当且仅当它包含以下四个连续子串中的任意一个:cheerful, glad, happy, pleased

给定一个字符串,判断它是否是“快乐的”。

解题思路

这是一个基础的字符串处理问题,核心是进行子串的搜索。由于需要查找的“快乐的”子串是固定的、数量很少的四个单词,我们可以采用最直接的方法来解决。

算法流程

  1. 定义快乐单词列表:首先,我们有一个固定的目标列表:{"cheerful", "glad", "happy", "pleased"}

  2. 遍历检查:对于输入的每一个字符串 s,我们只需要检查它是否包含了上述列表中的至少一个单词。

  3. 利用内建函数:我们可以遍历这个列表中的每一个单词,然后使用编程语言内建的字符串查找函数来判断该单词是否存在于 s 中。

    • 只要我们找到了第一个匹配的快乐单词,就可以立即确定该字符串是“快乐的”,输出 "Yes",并停止对当前字符串的后续检查。
    • 如果我们检查完了所有四个快乐单词,都没有在 s 中找到任何一个,那么这个字符串就不是“快乐的”,我们输出 "No"。

这个方法简单直接,并且对于题目给定的数据规模来说效率足够高。

代码

#include <iostream>
#include <string>
#include <vector>

using namespace std;

void solve() {
    string s;
    cin >> s;
    if (s.find("cheerful") != string::npos ||
        s.find("glad") != string::npos ||
        s.find("happy") != string::npos ||
        s.find("pleased") != string::npos) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        while (t-- > 0) {
            String s = sc.next();
            if (s.contains("cheerful") || s.contains("glad") || 
                s.contains("happy") || s.contains("pleased")) {
                System.out.println("Yes");
            } else {
                System.out.println("No");
            }
        }
    }
}
import sys

def solve():
    s = sys.stdin.readline().strip()
    if "cheerful" in s or "glad" in s or "happy" in s or "pleased" in s:
        print("Yes")
    else:
        print("No")

def main():
    try:
        t_str = sys.stdin.readline()
        if not t_str: return
        t = int(t_str)
        for _ in range(t):
            solve()
    except (IOError, ValueError):
        return

if __name__ == "__main__":
    main()

算法及复杂度

  • 算法:字符串搜索

  • 时间复杂度

    • 是测试数据的组数。
    • 对于每一组数据,设输入字符串长度为 。我们需要检查 4 个固定的子串。使用内建的查找函数,其时间复杂度通常与 呈线性关系。因此,处理一个字符串的总时间为
  • 空间复杂度

    • 需要 的空间来存储输入的字符串。