LeetCode算法题-Letter Case Permutation(Java实现)

静态代码分析工具实战盘点:从CLI到平台选型与落地避坑指南 在软件研发流程中,代码质量保障是团队协作的基石,而静态代码分析正是通过不运行程序、仅扫描源码来提前发现潜在缺陷的关键技术。其核心价值在于以低成本拦截空指针、资源泄漏、危险API调用等常见问题,从而显著提升代码评审效率。从原理上看,静态分析涵盖词法扫描、AST语法树解析到控制流与数据流分析三个层级,对应不同精度与性能开销。在实际工程中,SonarQube作为多语言统一管理平台,适合团队级质量门禁与趋势追踪;Semgrep以高可读性规则实现团队规范自动化;CodeQL则用于深度的安全审计。工具选型需结合语言生态 阅读详情

这是悦乐书的第315次更新,第336篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第184题(顺位题号是784)。给定一个字符串S,将每个字母单独转换为小写或大写以创建另一个字符串。返回可以创建的所有可能字符串的数组。例如:

输入:S =“a1b2”

输出:[“a1b2”,“A1b2”,“a1B2”,“A1B2”]


输入:S =“3z4”

输出:[“3z4”,“3Z4”]


输入:S =“12345”

输出:[“12345”]


注意:

  • S将是一个长度在1到12之间的字符串。

  • S将仅包含字母或数字。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

题目的意思是将字符串中的字母进行大小写转换,变成新的字符串,有点类似于排列组合。就像示例中的第一个字符串,里面有两个字母a和b,我们可以组合成四个新的字符串,ab,Ab,aB,AB,中间经历了两轮转换,第一轮是ab,Ab,只转换a,第二轮在第一轮的基础上只转换b,也就是从这两个新的字符串上转换,但是转换的字母要从第二个开始,ab经过转换就变成了ab,aB;Ab经过转换就变成Ab,AB。

所以我们需要将前一次的转换结果存起来,作为新的转换的原始字符串,同时没开始新的一轮,索引要指向下一位新的字母。对此,我们使用队列来存储每一轮转换后新的字符串,因为最后是输出List,也方便将队列转为List。

public List<String> letterCasePermutation(String S) {
    Queue<String> queue = new LinkedList<String>();
    queue.offer(S);
    for (int i = 0; i < S.length(); i++) {
        // 是数字就跳过
        if (Character.isDigit(S.charAt(i))){
            continue;
        }
        int size = queue.size();
        for (int j = 0; j < size; j++) {
            String cur = queue.poll();
            char[] arr = cur.toCharArray();
            // 转成大写,入队列
            arr[i] = Character.toUpperCase(arr[i]);
            queue.offer(String.valueOf(arr));
            // 转成小写,入队列
            arr[i] = Character.toLowerCase(arr[i]);
            queue.offer(String.valueOf(arr));
        }
    }
    return new LinkedList<>(queue);
}

03 第二种解法

经过上面第一种解法的分析,可以发现经过一轮转换后,新得到的字符串同样符合题目的问题情景,我们可以使用递归的思路。对此,我们使用一个辅助方法来完成,此方法有三个参数,一是需要返回的结果数组,二是S转成的字符数组,三是字符数组的索引。遇到数字直接索引加1进入下一轮,遇到字母,就分别转为大小写字母并且进入下一轮,如果遍历完字符数组所有字符,就将其添加进结果字符串数组中去。

public static List<String> letterCasePermutation(String S) {
    List<String> list = new ArrayList<String>();
    helper(list, S.toCharArray(), 0);
    return list;
}

public static void helper (List<String> list, char[] arr, int index) {
    if (index == arr.length) {
        list.add(new String(arr));
    } else {
        if (Character.isDigit(arr[index])) {
            helper(list, arr, index+1);
        } else {
            arr[index] = Character.toUpperCase(arr[index]);
            helper(list, arr, index+1);
            arr[index] = Character.toLowerCase(arr[index]);
            helper(list, arr, index+1);
        }
    }
}

04 小结

算法专题目前已日更超过五个月,算法题文章184+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

Nuvoton OpenTitan开源安全芯片技术解析与应用 硬件安全模块(HSM)作为可信计算基的核心组件,其设计透明度和可验证性正成为行业焦点。RISC-V架构凭借开源特性,为构建可审计的安全芯片提供了新范式。OpenTitan项目通过开放Verilog源码和形式化证明,实现了从物理不可克隆函数(PUF)到分层安全启动的全栈透明。该方案在lowRISC Voyager开发板上实测显示,安全启动时间小于200ms,性能损耗仅7%,显著优于传统黑盒方案。目前该技术已应用于Chromebook和数据中心,其40nm工艺版本更将功耗降至5μA待机水平,为物联网和边缘计算提 阅读详情

相关推荐

四轮两驱小车(四):STM32驱动5路灰度传感器PID循迹

之前买了一批5路灰度传感器,想用这传感器进行循迹,无奈网上和官方的资料提供的还是比较少,这里还是做一下当初的学习记录。

weixin_51651698的博客 6万+

Leetcode 784.字母大小写全排列(Letter Case Permutation)

Leetcode 784.字母大小写全排列 1 题目描述(Leetcode题目链接)   给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。 示例: 输入: S = "a1b2" 输出: ["a1b2", "a1B2", "A1b2", "A1B2"] 输入: S = "3z4" 输出: ["3z4", "3Z4"] 输入: S ...

qq_39378221的博客 412

matlab tolx,Nelder-Mead算法matlab

Nelder-Mead算法适合变量数不是很多的方程求极值.原理:Nelder-Mead法是利用多面体来逐步逼近最佳点x*.设函数变量为n维,则在n维空间里多面体有(n+1)个顶点.设x1,x2,...,xn+1为多面体的顶点,且满足:f(x1)<=f(x2)<=...<=f(xn+1)Nelder-Mead法试着将多面体中最差的顶点xn+1(也就是函数的最大点)以新的最佳点替代,...

weixin_36485298的博客 1480

深度优先遍历(DFS)- Letter CasePermutation - Combinations

深度优先遍历(DFS) 思路:从图中一个未访问的顶点V开始,沿着一条路一直走到尽头,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到尽头…,不断递归重复此过程,直到所有顶点都遍历完成。 特点:不撞南墙不回头,先走完一条路,再换另一条路,继续走,和数的前序遍历一样 树的深度优先遍历 1.从根节点1开始遍历,它的子节点有2,3,4,先遍历节点2,再遍历节点5,之后遍历节点9. 2.第一...

gl620321的博客 351

飞书应用开发脚手架lark-harness:从零构建企业级机器人

在构建企业级应用时,开发脚手架是提升工程效率和规范性的关键工具。其核心原理在于通过预设的项目模板、最佳实践和通用模块封装,自动化处理项目初始化、配置管理和基础架构搭建。这种技术价值在于将开发者从重复性劳动中解放出来,确保团队技术栈统一,并降低维护成本。在Node.js生态中,脚手架常与Express或Koa等Web框架结合,用于快速构建Web服务、API接口和实时事件处理系统。具体到飞书开放平台开发场景,开发者需要处理OAuth 2.0授权、事件订阅验证、消息加解密等复杂且标准的流程。lark-harnes

weixin_30703911的博客 613

打开UG会安装报错:initialization internal ERROR 的提示框,提示line 1344 of错误的解决方案

打开UG会安装报错:initialization internal ERROR 的提示框,提示line 1344 of错误的解决方案

Q82556499的博客 3524

Letter Case Permutation(回溯)

Letter Case Permutation(回溯) 题目大意: 给定一个字符串S 通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。 返回所有可能得到的字符串集合。 题目链接:Letter Case Permutation 样例 输入:S = “a1b2” 输出:[“a1b2”, “a1B2”, “A1b2”, “A1B2”] 输入:S = “3z4” 输出:[“3z4”, “3Z4”] 输入:S = “12345” 输出:[“12345”] 提示: S 的长度不超过12。 S 仅由数字

一名大三才开始刷题的程序猿的刷题日记 397

基于YOLOv8的视频监控违规停车智能识别系统与应用研究

通过这个毕设,你已经从数据准备、模型训练到界面开发,完整走了一遍深度学习项目的流程。把多个停车场的监控数据整合起来,做一个区域级的停车管理平台;加入车牌识别功能,直接定位到违规车辆的车主;试试把YOLO模型再优化一下,让它在手机端也能运行,实现移动巡检。相信我,按照这个教程一步步做,你的毕设不仅能顺利完成,还能做出亮点,让答辩老师眼前一亮。要是过程中遇到什么问题,随时可以再琢磨琢磨,或者找我聊聊,咱们一起把这个毕设做成精品。

LXY_LOVE36的博客 119

784. Letter Case Permutation

784. 字母大小写全排列 给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。 示例: 输入: S = "a1b2" 输出: ["a1b2", "a1B2", "A1b2", "A1B2"] 输入: S = "3z4" 输出: [&#3...

GGGGITFKBJG的主页 170

基于Scrapy+Playwright的学术会议信息智能爬取系统实战

本文详细介绍如何使用Python构建一个高效的学术会议信息爬取系统,结合Scrapy框架和Playwright无头浏览器技术,实现对全球学术会议数据的自动化采集、清洗和存储。文章包含完整的技术方案设计、代码实现细节以及性能优化策略,可帮助读者快速掌握现代网络爬虫开发的核心技术。关键词:Python爬虫、Scrapy、Playwright、学术会议、数据采集、反爬对抗python复制下载。

2201_76125261的博客 711

YOLO26优化:注意力魔改 | SKAttention注意力,自适应地调整其感受野大小,效果优于SENet

SKAttention输入自适应地调整其感受野大小的能力

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 252

【Leetcode】784. Letter Case Permutation

题目地址: https://leetcode.com/problems/letter-case-permutation/ 给定一个字符串sss,允许将其中的字母大小写变换。返回所有可能性。 思路是DFS。遇到字母时,枚举其为小写和大写两种情况,得到所有可能性等价于在一棵二叉树上进行遍历,只需要记得回溯的时候要恢复现场即可。想象sss是树根,变更其第一个英文字母后进入递归下一层,尝试变更之后的英文字母,遍历的时候把沿途经过的所有字符串加入最终结果;在递归结束的时候回溯到上一层节点,此时要把当初变更的字母再变回

数学、算法爱好者的博客 248

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Weekly Contest 72 leetcode 784. Letter Case Permutation

Given a string S, we can transform every letter individually to be lowercase or uppercase to create another string.  Return a list of all possible strings we could create. Examples: Input: S = "a1b2"

淡然坊 653

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LeetCode 784. Letter Case Permutation

原题链接在这里:https://leetcode.com/problems/letter-case-permutation/ 题目: Given a string S, we can transform every letter individuallyto be lowercase or uppercase to create another string. Return a ...

weixin_30650859的博客 121

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Leetcode学习笔记:#784. Letter Case Permutation

Leetcode学习笔记:#784. Letter Case Permutation Given a string S, we can transform every letter individually to be lowercase or uppercase to create another string. Return a list of all possible strings we...

ccystewart的博客 206

LeetCode-Letter Case Permutation

LeetCode Java Letter Case Permutation

坟头草一米七五 229

Leetcode-784. Letter Case Permutation 字母大小写全排列

题目 给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。 链接:https://leetcode.com/problems/letter-case-permutation/ Given a string S, we can transform every letter individually to be lowercase or uppercase to create another string. Return a list of a

JamieLuo的博客 241

leetcode题解:784. Letter Case Permutation(字母大小写排列)

Given a string S, we can transform every letter individually to be lowercase or uppercase to create another string. Return a list of all possible strings we could create.(对于给定的字符串S,我们可以将其中的每一个字母转成大写或...

fgao2的博客 352

LeetCode - 784 - 字母大小写全排列(letter-case-permutation)

一 目录 不折腾的前端,和咸鱼有什么区别目录一 目录二 前言三 解题及测试四 LeetCode Submit五 解题思路六 进一步思考二 前言 难度:简单涉及知识:位运算、回溯算法题目地...

weixin_41806099的博客 264

leetcode 784. Letter Case Permutation——所有BFS和DFS的题目本质上都可以抽象为tree,这样方便你写代码...

Given a string S, we can transform every letter individuallyto be lowercase or uppercase to create another string. Return a list of all possible strings we could create. Examples: Input: ...

djph26741的博客 190

Leetcode : letter-case-permutation ( 字母大小写全排列 784 )

本文的目的是收集一些典型的题目,记录其题型与解法,理解其思想,即做到一通百通! 欢迎大家提出宝贵意见! 题目 题目简介 给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。 返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。 示例 1: 输入:s = "a1b2" 输出:["a1b2", "a1B2", "A1b2", "A1B2"] 示例 2: 输入: s = "3z4" 输出: ["3z4","3Z4"] 提示: 1 <= s.length &lt

Lifereunion的博客 209

Leetcode784.Letter Case Permutation字母大小写全排列

给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。 示例: 输入: S = "a1b2" 输出: ["a1b2", "a1B2", "A1b2", "A1B2"] 输入: S = "3z4" 输出: ["3z4", "3Z4"] 输入: S = "12345" 输出

lMonster81 636

【LeetCode】17. Letter Combinations of a Phone Number 电话号码的字母组合

【LeetCode】17. Letter Combinations of a Phone Number 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/generate-parentheses/description/ 题目描述: Given a digit string, return all possible...

负雪明烛 3573

LeetCode 78. 子集(Subsets) 34

78. 子集 78. Subsets 题目描述 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明: 解集不能包含重复的子集。 每日一算法2019/6/6Day 34LeetCode78. Subsets 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], ...

weixin_30897079的博客 198
上一篇: LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)
下一篇: LeetCode算法题-Rotated Digits(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值