题解 | #快乐的字符串#

快乐的字符串

https://www.nowcoder.com/practice/7f4875507c654debb8e02084edbc4fd7

题目链接

快乐的字符串

题目描述

一个字符串是“快乐的”,当且仅当它包含以下四个连续子串中的任意一个: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 个固定的子串。使用内建的查找函数,其时间复杂度通常与 呈线性关系。因此,处理一个字符串的总时间为
  • 空间复杂度

    • 需要 的空间来存储输入的字符串。
全部评论

相关推荐

04-02 10:09
门头沟学院 Java
用微笑面对困难:这里面问题还是很多的,我也不清楚为啥大家会感觉没啥问题。首先就是全栈开发实习9个月的内容都没有java实习生的内容多,1整个技术栈没看出太核心和难点的内容,感觉好像被拉过去打杂了,而且全栈基本上很容易被毙。里面能问的bug是在太多了比如L:继承 BaseMapper 可直接使用内置方法’。请问你的 BaseMapper 是如何扫描实体类注解如果瞬时产生 100 个上传任务,MySQL 的索引设计是否会有瓶颈?你做过分库分表或者索引优化吗?全栈的内容可以针对动态难点去搞,技能特长写在下面吧,你写了这么多技能,项目和实习体现了多少?你可以在项目里多做文章然后把这个放下去,从大致来看实习不算太水,有含金量你也要写上内容针对哨兵里面的节点变化能问出一万个问题,这个很容易就爆了。
提前批简历挂麻了怎么办
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务