
难度:简单
给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。
1 2 3 4 5 6 7 8 9
|
示例: 输入: S = "a1b2" 输出: ["a1b2", "a1B2", "A1b2", "A1B2"]
输入: S = "3z4" 输出: ["3z4", "3Z4"]
输入: S = "12345" 输出: ["12345"]
|
注意:
我的思路
这题其实不难,将他想象成一颗树,每当是字母的时候分叉,不是字母的时候就不分叉。把所有子树列出来就是每个的字符串了。下面是通过深搜来实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
public List<String> (String S) { List<String> list = new LinkedList<>(); list.add(S); tolist(list, 0, S); return list; }
public void tolist(List<String> list, int i, String s) { if (i == s.length()) { return; } Boolean isTrue = (s.charAt(i) >= 'a' && s.charAt(i) <= 'z') || (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z'); if (isTrue) { String s1; if (Character.isLowerCase(s.charAt(i))) { s1 = s.substring(0, i) + Character.toUpperCase(s.charAt(i)) + s.substring(i + 1, s.length()); } else { s1 = s.substring(0, i) + Character.toLowerCase(s.charAt(i)) + s.substring(i + 1, s.length()); } list.add(s1); tolist(list, i + 1, s); tolist(list, i + 1, s1); } else { tolist(list, i + 1, s); } }
|
近期评论