华为众测短剧大全,进军短剧赛道!

华为进军短剧市场

近日,华为视频众测一款「短剧大全」快应用,引发「华为将入局短剧赛道」的猜测。

alt

该应用简介为"短剧大全快应用,畅看海量短剧"。

目前该快应用还处于测试阶段。

在更新内容说明中提到:当前短剧数量还较少,以关注功能和体验为主,后续会不断引入新的短剧。

最近两年,短剧市场成为了投资市场的"香饽饽"。

据《2023短剧行业研究报告》显示,2023 年国内共发行了短剧 3000+ 部,市场规模为 373.9 亿元,同比增长 267.65%,预计 2024 年将超 500 亿元,不少机构认为到 2027 年,短剧的国内市场将会破千亿。

在国内外影视行业整体进入调整期的背景下,「一分钟知晓剧情,两分钟情节跌宕,三分钟上演重生复仇」的「时长短,节奏快,情景爽」的短剧正在不断的占领观众的碎片化时间。

虽然目前提到「短剧」大多都还是「霸总爱上我」等狗血网文改编的剧情,消费主力群体也是「制造业里的厂妹们」,但她们的付费意愿很强,愿意按集付费,同时缺乏网盘搜索等能力(毕竟学这些能力的时间都够看好几集了),是天然优质的付费用户。

下沉市场足够大,自然能够支撑起一个行业。

而且随着「短剧」的不断破圈,同时有了「短视频」养起来的用户习惯和基础设施,短剧或许真的是下一个风口。

...

回归主题。

来一道和「华为 OD」相关的题目。

题目描述

平台:LeetCode

题号:784

给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。

返回所有可能得到的字符串集合。

以任意顺序返回输出。

示例 1:

输入:s = "a1b2"

输出:["a1b2""a1B2""A1b2""A1B2"]

示例 2:

输入: s = "3z4"

输出: ["3z4","3Z4"]

提示:

  • s 由小写英文字母、大写英文字母和数字组成

DFS

数据范围为 12,同时要我们求所有具体方案,容易想到使用 DFS 进行「爆搜」。

我们可以从前往后考虑每个 ,根据 是否为字母进行分情况讨论:

  • 不是字母,直接保留
  • 是字母,则有「保留原字母」或「进行大小写转换」两种决策

设计 DFS 函数为 void dfs(int idx, int n, String cur):其中 固定为具体方案的长度(即原字符串长度),而 idxcur 分别为当前处理到哪一个 ,而 cur 则是当前具体方案。

根据上述分析可知,当 不为字母,将其直接追加到 cur 上,并决策下一个位置 ;而当 为字母时,我们可以选择将 追加到 cur 上(保留原字母)或是将 进行翻转后再追加到 cur 上(进行大小写转换)。

最后当我们满足 idx = n 时,说明已经对原字符串的每一位置决策完成,将当前具体方案 cur 加入答案。

一些细节:我们可以通过与 32 异或来进行大小写转换

Java 代码:

class Solution {
    char[] cs;
    List<String> ans = new ArrayList<>();
    public List<String> letterCasePermutation(String s) {
        cs = s.toCharArray();
        dfs(0, s.length(), new char[s.length()]);
        return ans;
    }
    void dfs(int idx, int n, char[] cur) {
        if (idx == n) {
            ans.add(String.valueOf(cur));
            return ;
        }
        cur[idx] = cs[idx];
        dfs(idx + 1, n, cur);
        if (Character.isLetter(cs[idx])) {
            cur[idx] = (char) (cs[idx] ^ 32);
            dfs(idx + 1, n, cur);
        }
    }
}

C++ 代码:

class Solution {
public:
    vector<string> ans;
    string s;
    void dfs(int idx, int n, string cur) {
        if (idx == n) {
            ans.push_back(cur);
            return;
        }
        cur.push_back(s[idx]);
        dfs(idx + 1, n, cur);
        if (isalpha(s[idx])) {
            cur[idx] = s[idx] ^ 32;
            dfs(idx + 1, n, cur);
        }
    }
    vector<stringletterCasePermutation(string s) {
        this->s = s;
        dfs(0, s.length(), "");
        return ans;
    }
};

Python 代码:

class Solution:
    def letterCasePermutation(self, s: str) -> List[str]:
        ans = []
        def dfs(idx, n, cur):
            if idx == n:
                ans.append(cur)
                return 
            dfs(idx + 1, n, cur + s[idx])
            if 'a' <= s[idx] <= 'z' or 'A' <= s[idx] <= 'Z':
                dfs(idx + 1, n, cur + s[idx].swapcase())
        dfs(0, len(s), '')
        return ans

TypeScript 代码:

function letterCasePermutation(s: string): string[] {
    const ans = new Array<string>()
    function dfs(idx: number, n: number, cur: string): void {
        if (idx == n) {
            ans.push(cur)
            return 
        }
        dfs(idx + 1, n, cur + s[idx])
        if ((s[idx] >= 'a' && s[idx] <= 'z') || (s[idx] >= 'A' && s[idx] <= 'Z')) {
            dfs(idx + 1, n, cur + String.fromCharCode(s.charCodeAt(idx) ^ 32))
        }
    }
    dfs(0, s.length, "")
    return ans
}
  • 时间复杂度:最坏情况下原串 s 的每一位均为字母(均有保留和转换两种决策),此时具体方案数量共 种;同时每一种具体方案我们都需要用与原串长度相同的复杂度来进行构造。复杂度为
  • 空间复杂度:

二进制枚举

根据解法一可知,具体方案的个数与字符串 s1 存在的字母个数相关,当 s1 存在 m 个字母时,由于每个字母存在两种决策,总的方案数个数为 2^m 个。

因此可以使用「二进制枚举」的方式来做:使用变量 s 代表字符串 s1 的字母翻转状态,s 的取值范围为 [0, 1 << m)。若 s 的第 j 位为 0 代表在 s1 中第 j 个字母不进行翻转,而当为 1 时则代表翻转。

每一个状态 s 对应了一个具体方案,通过枚举所有翻转状态 s,可构造出所有具体方案。

Java 代码:

class Solution {
    public List<String> letterCasePermutation(String str) {
        List<String> ans = new ArrayList<String>();
        int n = str.length(), m = 0;
        for (int i = 0; i < n; i++) m += Character.isLetter(str.charAt(i)) ? 1 : 0;
        for (int s = 0; s < (1 << m); s++) {
            char[] cs = str.toCharArray();
            for (int i = 0, j = 0; i < n; i++) {
                if (!Character.isLetter(cs[i])) continue;
                cs[i] = ((s >> j) & 1) == 1 ? (char) (cs[i] ^ 32) : cs[i];
                j++;
            }
            ans.add(String.valueOf(cs));
        }
        return ans;
    }
}

C++ 代码:

class Solution {
public:
    vector<stringletterCasePermutation(string str) {
        vector<string> ans;
        int n = str.length(), m = 0;
        for (int i = 0; i < n; i++) m += isalpha(str[i]) ? 1 : 0;
        for (int s = 0; s < (1 << m); s++) {
            string cs = str;
            for (int i = 0, j = 0; i < n; i++) {
                if (!isalpha(cs[i])) continue;
                cs[i] = ((s >> j) & 1) ? (cs[i] ^ 32) : cs[i];
                j++;
            }
            ans.push_back(cs);
        }
        return ans;
    }
};

Python 代码:

class Solution:
    def letterCasePermutation(self, s1: str) -> List[str]:
        def isLetter(ch):
            return 'a' <= ch <= 'z' or 'A' <= ch <= 'Z'
        ans = []
        n, m = len(s1), len([ch for ch in s1 if isLetter(ch)])
        for s in range(1 << m):
            cur = ''
            j = 0
            for i in range(n):
                if not isLetter(s1[i]) or not ((s >> j) & 1):
                    cur += s1[i]
                else:
                    cur += s1[i].swapcase()
                if isLetter(s1[i]):
                    j += 1
            ans.append(cur)
        return ans

TypeScript 代码:

function letterCasePermutation(str: string): string[] {
    function isLetter(ch: string): boolean {
        return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
    }
    const ans = new Array<string>()
    let n = str.length, m = 0
    for (let i = 0; i < n; i++) m += isLetter(str[i]) ? 1 : 0
    for (let s = 0; s < (1 << m); s++) {
        let cur = ''
        for (let i = 0, j = 0; i < n; i++) {
            if (!isLetter(str[i]) || ((s >> j) & 1) == 0) cur += str[i]
            else cur += String.fromCharCode(str.charCodeAt(i) ^ 32)
            if (isLetter(str[i])) j++
        }
        ans.push(cur)
    }
    return ans
}
  • 时间复杂度:最坏情况下原串 s 的每一位均为字母(均有保留和转换两种决策),此时具体方案数量共 种;同时每一种具体方案我们都需要用与原串长度相同的复杂度来进行构造。复杂度为
  • 空间复杂度:

最后

给大伙通知一下 📢 :

全网最低价 LeetCode 会员目前仍可用 ~

📅 年度会员:有效期加赠两个月!!; 季度会员:有效期加赠两周!!

🧧 年度会员:获 66.66 现金红包!!; 季度会员:获 22.22 现金红包!!

🎁 年度会员:参与当月丰厚专属实物抽奖(中奖率 > 30%)!!

专属链接:leetcode.cn/premium/?promoChannel=acoier

我是宫水三叶,每天都会分享算法知识,并和大家聊聊近期的所见所闻。

欢迎关注,明天见。

更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地 🎉🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/649379.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

牛客循环5.27

1006 错误代码 不知道原因&#xff0c;有大佬解答一下吗 ac代码 1007 错误代码 ac代码

Kubeadm Online Install Kubernetes v1.30.1

文章目录 简介架构预备条件资源规划 基础配置配置网卡配置 hosts安装常用软件配置互信安装 ansible配置 hosts关闭 swapselinux防火墙文件句柄数配置内核参数日志主机配置代理 安装 containerd方法1. 适用于rocky-8.9-x86_64-dvd1.iso方法2 适用于 rocky-8.9-x86_64-minimal.is…

可视化大屏开发,知道了这些经验以及解决方案,效率至少提升2倍!(完结篇)

大家好&#xff0c;我是日拱一卒的攻城师不浪&#xff0c;专注可视化、数字孪生、前端、nodejs、AI学习、GIS等学习沉淀&#xff0c;这是2024年输出的第16/100篇文章&#xff1b; 前言 之前写了两篇可视化大屏开发的经验总结&#xff0c;小伙伴们反应还不错。 最近&#xff0…

Unity 权限 之 Android 【权限 动态申请】功能的简单封装

Unity 权限 之 Android 【权限 动态申请】功能的简单封装 目录 Unity 权限 之 Android 【权限 动态申请】功能的简单封装 一、简单介绍 二、Android 权限 动态申请 三、实现原理 四、注意事项 五、案例实现简单步骤 附录&#xff1a; 一、进一步优化 二、多个权限申请…

5款好用的AI写作软件,一键生成高质量文章

在当今信息快速发展的时代&#xff0c;AI写作软件逐渐成为创作者们的得力助手。它们能够凭借先进的技术和算法&#xff0c;一键生成高质量的文章&#xff0c;为创作者们节省大量的创作时间和精力。以下是5款备受好评的AI写作软件&#xff0c;下面在本文中分享给大家&#xff0c…

物联网网关在电梯按需维保方案中起到什么作用?梯联网网关

为减少电梯故障和预防电梯事故&#xff0c;保障人身和财产安全&#xff0c;基于物联网技术的电梯按需维保已在全国多地陆续推行&#xff0c;做到了电梯安全隐患预测式排查&#xff0c;处理问题更具科学性、针对性和精准性&#xff0c;有效提升了电梯运行的安全性。那么&#xf…

深入理解一下栈

1、栈&#xff1a;数据结构 为什么 main()方法 最先执行&#xff0c;最后结束&#xff1f; 当然是因为 main()方法入栈啦。 2、栈&#xff1a;栈内存&#xff0c;主管程序的运行&#xff0c;生命周期和现成同步&#xff1b; 线程结束&#xff0c;栈内内存也就释放了&#xff0c…

VasDolly图形工具-Android多渠道打包福利

简介 基于腾讯VasDolly最新版本3.0.6的图形界面衍生版本&#xff0c;旨在更好的帮助开发者构建多渠道包 使用 下载并解压工具包&#xff0c;找到Startup脚本并双击启动图形界面&#xff08;注意&#xff1a;本地需安装java环境&#xff09; 渠道格式说明 txt文件&#xff…

测试基础06:软件产品的运行环境dev、sit、test、fat、uat、pre、pro

​​​​​​​课程大纲 1、Dev开发环境 &#xff08;Development environment&#xff09; 使用者 开发人员使用。 用途 用于编程&#xff0c;版本变动很大。 外部能否访问 外部用户无法访问。 2、sit/ITE系统集成测试环境 &#xff08;System Integration Testing en…

MySQL--内置函数

一、时间函数 简单使用&#xff1a; 函数也可以嵌套使用&#xff1a; 示例&#xff1a;给当前时间加上50天 它也会自动帮我们计算相加后正确的日期。除了加天数&#xff0c;还可以加分钟&#xff0c;秒这些。 示例&#xff1a;计算新中国成立到现在经过了多少天 select date…

宝塔部署前后端分离项目手册

文章目录 安装宝塔安装环境开始部署1. 前端Vue项目1.先本地启动前端项目&#xff08;记住端口号&#xff09;2.打包前端项目3.上传前端项目4.创建PHP站点5.安全里开放端口号6.测试前端 2. 后端boot项目1. 先在本地跑起来2.修改数据库的配置信息3. 项目打包4. nohup启动项目4.1 …

字符串函数(2)<C语言>

前言 快一周没更博客了&#xff0c;最近有点忙&#xff0c;今天闲下来了&#xff0c;还是不行&#xff0c;继续干&#xff0c;书接上回继续介绍字符串函数&#xff1a;strncpy()、strncat()、strcmp()、strtok()使用、strstr()使用以及模拟实现、strerror()使用。 strncpy()、s…

如何查看网站的cookie?

前言&#xff1a; 在网络世界中&#xff0c;cookie是一种常见的信息存储方式。 对于开发者和普通用户来说&#xff0c;了解如何查看CSDN的cookie是非常重要的。 本文将介绍几种常用的方法&#xff0c;帮助大家更好地理解和使用cookie&#xff1a; 代码示例&#xff1a; 通过浏…

油猴(Tampermonkey)如何实现网站的自动化操作

1. 安装油猴插件&#xff1a;首先&#xff0c;在你使用的浏览器上安装油猴插件。油猴支持多种浏览器&#xff0c;如Chrome、Firefox等。你可以在对应的插件商店中搜索并安装油猴插件。 2. 创建用户脚本&#xff1a;打开油猴插件的管理界面&#xff0c;点击"新建脚本"…

人类行为验证处理方案 —— 脱离UI组件库实现登录、注册+表单校验

目录 01: 构建登录模块基础UI结构 02: 表单校验实现原理与方案分析 表单校验的实现原理 自定义表单校验方案分析 文章中的方案实现 03: 基于 vee-validate 实现普适的表单校验 04: 什么是人类行为验证&#xff1f;它的目的、实现原理、构建方案分别是什么&am…

结合Django和Vue.js构建现代Web应用

文章目录 1. 创建Django项目2. 配置Django后端3. 创建Vue.js前端4. 连接Django和Vue.js5. 构建和部署 在现代Web开发中&#xff0c;结合后端框架和前端框架是非常常见的&#xff0c;其中Django作为一种流行的Python后端框架&#xff0c;而Vue.js则是一种灵活强大的前端框架。本…

一、Nginx详解和安装

目录 一、简介 1、什么是Nginx 2、Nginx的优点 二、四大应用场景 1、HTTP服务器 2、反向代理 3、负载均衡 4、动静分离 三、Nginx 源码安装 1、安装相关依赖 2、启动nginx 3、安装成系统服务 一、简介 1、什么是Nginx Nginx是一款轻量级的Web服务器&#xff0c;反向…

艾体宝干货 | 用于故障排除的最佳 Wireshark 过滤器

在网络故障排除过程中&#xff0c;Wireshark是一款非常强大的工具&#xff0c;它可以用来分析网络数据包并解决各种问题。本文将介绍一些好用的Wireshark过滤器&#xff0c;以便更有效地进行故障排除。 分析网络行为和排除网络故障就像用漏斗过滤渣滓。因此&#xff0c;网络协…

如何给出好的“文言一心”指令?

一、文言一心是什么&#xff1f; 在现代技术背景下&#xff0c;“文言一心”还是百度公司创建的一款大语言模型。这款模型基于飞桨深度学习平台和文心知识增强大模型&#xff0c;并拥有强大的中文语料库&#xff0c;可以理解和生成富含文化内涵和哲理的文本内容。其核心技术架构…

MahApps.Metro的MVVM模式解析(二) 主题功能

MahApps.Metro的MVVM模式解析&#xff08;二&#xff09; 主题功能 MahApps.Metro是一个开源的WPF框架&#xff0c;旨在为WPF应用程序提供现代和漂亮的用户界面。 在MahApps.Metro中提供了切换主题的功能。经过多日的筛选和分析&#xff0c;在本文来理清它的脉络。 1 主题功…