题目:
给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。
返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。
示例 1:
输入:s = "a1b2"
输出:["a1b2", "a1B2", "A1b2", "A1B2"]
示例 2:
输入: s = "3z4"
输出: ["3z4","3Z4"]
提示:
- 1 <= s.length <= 12
- s 由小写英文字母、大写英文字母和数字组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/letter-case-permutation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
一、用List模拟
有思路,但是写不出来完整的代码
参考@【爪哇缪斯】:https://leetcode.cn/problems/letter-case-permutation/solution/zhua-wa-mou-si-by-muse-77-7jb8/
首先将原字符串 s 放进结果ans中,然后再从头开始遍历字符串 s :
- 当发现下标为 i 处是数字时,就跳过;
- 当发现下标为 i 处是英文字母时,就进行大小写的转换,将本次转换后的整个字符串加入到ans中。
直到i 到达字符串的末尾表示字符串 s 遍历完成,返回ans。结合图进行理解。
java代码:
1 class Solution { 2 public List<String> letterCasePermutation(String s) { 3 List<String> ans = new ArrayList<>(); 4 //先将原字符串添加进结果中 5 ans.add(s); 6 //外层循环控制遍历的字符下标 7 for(int i = 0; i < s.length(); i++){ 8 //如果是数字就跳过 9 if(s.charAt(i) < 'A') continue; 10 int n = ans.size(); 11 //内层循环控制改变的字符串下标 12 for(int j = 0; j < n; j++){ 13 char[] cs = ans.get(j).toCharArray(); 14 //直接定位在是字符的下标进行大小写转换 15 //将小写转换成大写 16 if(cs[i] >= 'a'){ 17 cs[i] = (char)(cs[i] - 32); 18 }else{ 19 //将大写转换成小写 20 cs[i] = (char)(cs[i] + 32); 21 } 22 //将本次转换后的字符串加入到结果中 23 ans.add(new String(cs)); 24 } 25 } 26 return ans; 27 } 28 }
标签:784,java,力扣,cs,大小写,ans,字符串,下标 From: https://www.cnblogs.com/liu-myu/p/16841386.html