Leetcode刷题详解——字母大小写全排列

1. 题目链接:784. 字母大小写全排列

2. 题目描述:

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

返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。

示例 1:

输入:s = "a1b2"
输出:["a1b2", "a1B2", "A1b2", "A1B2"]

示例 2:

输入: s = "3z4"
输出: ["3z4","3Z4"]

提示:

  • 1 <= s.length <= 12
  • s 由小写英文字母、大写英文字母和数字组成

3. 算法(递归):

3.1 算法思路:

只需要对英文字母进行处理,处理每个元素时存在三种情况:

  1. 不进行处理
  2. 若当前字母是英文字母并且是大写,将其修改为小写
  3. 若当前字母是英文字母并且是小写,将其修改为大写

3.2 递归流程:

  1. 递归结束条件:当前需要处理的元素下标越界,表示处理完毕,记录当前状态并返回
  2. 对当前元素不进行任何处理,直接递归下一位元素
  3. 判断当前元素是否为小写字母。若是将其修改为大写字母并递归下一个元素,递归结束时撤销修改操作
  4. 判断当前元素是否为大写字母,若是将其修改为小写字母并递归下一个元素,递归结束时撤销修改操作

请添加图片描述

3.3 C++算法代码:

class Solution {
    string path; // 用于存储当前路径的字符串
    vector<string> ret; // 用于存储所有可能的排列结果

public:
    // 主函数,接收输入字符串s,返回所有可能的排列结果
    vector<string> letterCasePermutation(string s) {
        dfs(s, 0); // 调用深度优先搜索函数进行递归遍历
        return ret; // 返回所有可能的排列结果
    }

    // 深度优先搜索函数,接收输入字符串s和当前位置pos
    void dfs(string& s, int pos) {
        // 如果当前位置等于字符串长度,说明已经遍历完整个字符串
        if (pos == s.size()) {
            ret.push_back(path); // 将当前路径添加到结果列表中
            return; // 结束当前递归分支
        }

        char ch = s[pos]; // 获取当前位置的字符
        path.push_back(ch); // 将当前字符添加到路径中
        dfs(s, pos + 1); // 继续递归遍历下一个位置
        path.pop_back(); // 回溯,移除路径中的最后一个字符

        // 如果当前字符不是数字,则尝试将其大小写互换并继续递归遍历
        if (ch < '0' || ch > '9') {
            char tmp = change(ch); // 调用change函数将字符大小写互换
            path.push_back(tmp); // 将大小写互换后的字符添加到路径中
            dfs(s, pos + 1); // 继续递归遍历下一个位置
            path.pop_back(); // 回溯,移除路径中的最后一个字符
        }
    }

    // 辅助函数,用于将小写字母转换为大写字母,大写字母转换为小写字母
    char change(char ch) {
        if (ch >= 'a' && ch <= 'z')
            ch -= 32; // 如果是小写字母,将其转换为大写字母
        else
            ch += 32; // 如果是大写字母,将其转换为小写字母
        return ch; // 返回转换后的字符
    }
};

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

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

相关文章

渲染管线详解

光栅化的渲染管线一般分为三大阶段&#xff1a;应用程序阶段->几何阶段->光栅化阶段 也可以四大阶段&#xff1a; 应用程序阶段->几何阶段->光栅化阶段->逐片元操作阶段 更详细的流程如下&#xff1a; Vertex Specification&#xff08;顶点规范化&#xff09…

刚接触银行新业务测试的一些问题

在银行金融领域的测试工作&#xff0c;相信很多测试工程师都会遇到自己不熟悉的业务。然后开始看文档&#xff0c;问开发或者需求人员。搞懂了大概的流程&#xff0c;然后开始进行测试。 不过遇到复杂的业务情况时&#xff0c;真的很需要时间去梳理。而且测试环境的配置问题、不…

【自然语言处理】基于python的问答系统实现

一&#xff0c;文件准备 该问答系统是基于已知的问题和其一一对应的答案进行实现的。首先需要准备两个文本文件&#xff0c;分别命名为“question.txt”和“answer.txt”&#xff0c;分别是问题文件和答案文件&#xff0c;每一行是一个问题以及对应的答案。 问题文件: 中国的首…

在群晖NAS上使用AudioStation实现本地音频公网共享

文章目录 1. 本教程使用环境&#xff1a;2. 制作音频分享链接3. 制作永久固定音频分享链接&#xff1a; 之前文章我详细介绍了如何在公网环境下使用pc和移动端访问群晖Audio Station&#xff1a; 公网访问群晖audiostation听歌 - cpolar 极点云 群晖套件不仅能读写本地文件&a…

Spring Boot中配置多个数据源

配置数据源实际上就是配置多个数据库&#xff0c;在一个配置文件中配置多个数据库&#xff0c;这样做主要的好处有以下几点&#xff1a; 数据库隔离&#xff1a;通过配置多个数据源&#xff0c;可以将不同的业务数据存储在不同的数据库中&#xff0c;实现数据的隔离。这样可以…

安全易用的文件同步程序:Syncthing | 开源日报 No.70

syncthing/syncthing Stars: 55.0k License: MPL-2.0 Syncthing 是一个持续文件同步程序&#xff0c;它在两台或多台计算机之间同步文件。该项目的主要功能和核心优势包括&#xff1a; 安全防止数据丢失抵御攻击易于使用自动化操作&#xff0c;仅在必要时需要用户交互适合在各…

Pytest系列(16)- 分布式测试插件之pytest-xdist的详细使用

前言 平常我们功能测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟&#xff0c;如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时&#xff0c;会需要协调多个测试资源来把任务分成两部分&#xff0c;于是执行时间缩短一半&#…

船舶数据采集与数据模块解决方案

标准化信息处理单元原理样机初步方案&#xff1a; 1&#xff09;系统组成 标准化信息处理单元原理样机包含硬件部分和软件部分。 硬件部分包括集成电路板、电源模块、主控模块、采集模块、信息处理模块、通讯模块、I/O模块等。 软件部分包括协议统一标准化模块、设备互联互…

R语言将向量横向转换为单行数据框,随后整合数量不确定的数据框

vector1 c(1, “karthik”, “IT”) names(vector1) c(“id”, “name”, “branch”) df data.frame(as.list(vector1)) print(df) 先给向量的元素命名&#xff0c;然后转换为列表&#xff0c;最后转换为数据框。 我的需求大概是这个样子&#xff1a;数量不确定的仅有单行…

猫罐头怎么选?千万别错过这5款好吃放心的猫罐头推荐!

猫罐头不仅美味可口&#xff0c;而且营养丰富&#xff0c;是专为猫咪打造的美食。那么&#xff0c;猫罐头怎么选&#xff1f;作为一位经营宠物店7年的店长&#xff0c;我对猫猫的饮食都非常重视&#xff0c;也见证了很多猫咪品尝各种猫罐头的瞬间&#xff0c;现在我对各个品牌的…

信创加速,美创科技加入UOS主动安全防护计划(UAPP)

近日&#xff0c;统信UOS主动安全防护计划 (UAPP) 技术沙龙暨新老会员交流活动在北京召开。 美创科技作为信创产业的重要参与者受邀参加。在2023年度UAPP合作伙伴授牌发布仪式上&#xff0c;美创科技获得统信软件授牌&#xff0c;正式成为UAPP成员单位&#xff0c;将与统信软件…

共话医疗数据安全,美创科技@2023南湖HIT论坛,11月11日见

11月11日浙江嘉兴 2023南湖HIT论坛 如约而来 深入数据驱动运营管理、运营数据中心建设、数据治理和数据安全、数据资产“入表”等热点、前沿话题 医疗数据安全、数字化转型深耕者—— 美创科技再次深入参与 全新发布&#xff1a;医疗数据安全白皮书 深度探讨&#xff1a;数字…

详细创建Prism架构wpf项目

方案一&#xff1a; 1.创建一个普通wpf项目 2、安装NuGet包&#xff1a;Prism.DryIoc 3、App.xaml.cs中: 将原本的父类Application改为&#xff1a;PrismApplication&#xff0c;并且实现抽象类 CreateShell方法中写上&#xff1a;”return Container.Resolve<MainWindow>…

分享4个MSVCP100.dll丢失的解决方法

msvcp100.dll是一个重要的动态链接库文件&#xff0c;它是Microsoft Visual C 2010 Redistributable Package的一部分。这个文件的作用是提供在运行C程序时所需的函数和功能。如果计算机系统中msvcp100.dll丢失或者损坏&#xff0c;就会导致软件程序无法启动运行&#xff0c;会…

【STM32】HAL库UART含校验位的串口通信配置BUG避坑

【STM32】HAL库UART含校验位的串口通信配置BUG避坑 文章目录 UART协议校验位HAL库配置含校验位的串口配置BUG避坑附录&#xff1a;Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时 位带操作位带代码位带宏定义总线函…

2023年萤石C6C系列监控如何设置群晖Surveillance网络摄像机套件教程

2023年萤石C6C系列监控如何设置群晖Surveillance网络摄像机套件教程 前置工作莹石云视频App设置群晖Nas设置温馨提醒 前置工作 按照说明书安装好莹石监控摄像机&#xff0c;确保机器正常运作&#xff1b;设置好莹石云视频App&#xff0c;确保能够正常查看监控视频。在群晖Nas的…

RocketMQ常用管理命令

MQAdmin是RocketMQ自带的命令行管理工具&#xff0c;在bin目录下&#xff0c;运行mqadmin即可执行。使用mqadmin命令&#xff0c;可以进行创建、修改Topic&#xff0c;更新Broker的配置信息&#xff0c;查询特定消息等各种操作。本节将介绍几个常用的命令。 1.创建/修改Topic …

基于STC15单片机温度光照蓝牙传输-proteus仿真-源程序

一、系统方案 本设计采用STC15单片机作为主控器&#xff0c;液晶1602显示&#xff0c;DS18B20采集温度&#xff0c;光敏电阻采集光照、按键设置温度上下限&#xff0c;测量温度小于下限&#xff0c;启动加热&#xff0c;测量温度大于上限&#xff0c;启动降温。 二、硬件设计 …

聚观早报 |GPT-4周活用户数达1亿;长城汽车10月销量增加

【聚观365】11月8日消息 GPT-4周活用户数达1亿 长城汽车10月销量增加 xAI宣布推出PromptIDE工具 aigo爱国者连发5款儿童手表 SpaceX预计今年营收90亿美元 GPT-4周活用户数达1亿 在OpenAI首届开发者大会上&#xff0c;该公司首席执行官萨姆奥特曼&#xff08;Sam Altman&a…

Linux内核分析(九)--CPU上下文

目录 一、引言 二、CPU上下文 ------>2.1、CPU上下文切换 三、线程上下文切换 ------>3.1、协程 四、中断上下文切换 ------>4.1、vmstat ------>4.2、pidstat ------>4.3、sysbench 一、引言 Linux是一个多任务的操作系统,可以支持远大于CPU数量的…