Case-specific Sorting of Strings
JavaView on GFG
Advertisement
Intuition
Sort string keeping uppercase in their positions and lowercase in their positions separately.
Algorithm
- 1Extract uppercase letters and positions, extract lowercase letters and positions. Sort each group. Re-place.
Common Pitfalls
- •Two separate sorted sequences. Map back to original case-specific positions. O(n log n).
Case-specific Sorting of Strings.java
Java
// Approach: Separate uppercase and lowercase characters, sort each group, then merge back in original case positions.
// Time: O(n log n) Space: O(n)
class Solution {
public static String caseSort(String s) {
int[] upper = new int[26];
int[] lower = new int[26];
for (char a : s.toCharArray()) {
if (a >= 'a' && a <= 'z')
lower[a - 'a']++;
else
upper[a - 'A']++;
}
int i = 0;
int j = 0;
StringBuilder sb = new StringBuilder();
for (int k = 0; k < s.length(); k++) {
char ch = s.charAt(k);
if (ch >= 'a' && ch <= 'z') {
while (lower[i] == 0)
i++;
sb.append((char) ('a' + i));
lower[i]--;
} else {
while (upper[j] == 0)
j++;
sb.append((char) ('A' + j));
upper[j]--;
}
}
return sb.toString();
}
}Advertisement
Was this solution helpful?