forked from fishercoder1534/Leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path_784.java
80 lines (76 loc) · 3.03 KB
/
_784.java
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package com.fishercoder.solutions;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class _784 {
public static class Solution1 {
public List<String> letterCasePermutation(String S) {
Set<String> result = new HashSet<>();
result.add(S);
for (int i = 0; i < S.length(); i++) {
if (Character.isAlphabetic(S.charAt(i))) {
Set<String> newResult = new HashSet<>();
for (String word : result) {
if (Character.isUpperCase(word.charAt(i))) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < i; j++) {
sb.append(word.charAt(j));
}
sb.append(Character.toLowerCase(word.charAt(i)));
for (int j = i + 1; j < word.length(); j++) {
sb.append(word.charAt(j));
}
newResult.add(sb.toString());
} else {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < i; j++) {
sb.append(word.charAt(j));
}
sb.append(Character.toUpperCase(word.charAt(i)));
for (int j = i + 1; j < word.length(); j++) {
sb.append(word.charAt(j));
}
newResult.add(sb.toString());
}
}
result.addAll(newResult);
}
}
return new ArrayList<>(result);
}
}
public static class Solution2 {
/**
* My completely original solution on 10/11/2021.
*/
public List<String> letterCasePermutation(String s) {
List<String> ans = new ArrayList<>();
ans.add("");
return recursion(s, ans, 0);
}
private List<String> recursion(String s, List<String> ans, int start) {
if (start >= s.length()) {
return ans;
}
List<String> newList = new ArrayList<>();
int index = start;
while (start < s.length() && Character.isDigit(s.charAt(start))) {
start++;
}
String digits = "";
if (start > index) {
digits = s.substring(index, start);
}
for (String str : ans) {
if (start < s.length()) {
newList.add(str + digits + Character.toUpperCase(s.charAt(start)));
newList.add(str + digits + Character.toLowerCase(s.charAt(start)));
} else {
newList.add(str + digits);
}
}
return recursion(s, newList, start + 1);
}
}
}