Skip to content

Commit d39728c

Browse files
authored
Merge pull request #4 from DatMV01/test/add-unittest-isAllCharactersUniqueAndLowercaseAndInAlphabet
Add test cases for isAllCharactersUniqueAndLowercaseAndInAlphabet()
2 parents a051a1a + ac5a289 commit d39728c

File tree

2 files changed

+144
-9
lines changed

2 files changed

+144
-9
lines changed

src/main/java/com/ctci/arraysandstrings/IsUnique.java

+31-8
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,37 @@ public static boolean isAllCharactersUniqueAndInASCII(String str) {
3737
return true;
3838
}
3939

40-
private static boolean hasAllUniqueCharactersWhenStringContainsAllLowercase(String s) {
40+
/**
41+
* Check whether the input string contains different individual characters, lowercase
42+
* and in between 'a' and 'z'
43+
*
44+
* @param str Input string
45+
* @return true if all characters are different from each other,lowercase and between 'a' and 'z', otherwise false.
46+
*/
47+
public static boolean isAllCharactersUniqueAndLowercaseAndInAlphabet(String str) {
48+
if (str == null
49+
|| str.isEmpty()
50+
|| str.length() > 26) {
51+
return false;
52+
}
53+
4154
int checker = 0;
42-
for (int i = 0; i < s.length(); i++) {
43-
int charValue = s.charAt(i) - 'a';
44-
if ((checker & (1 << charValue)) > 0) {
55+
int stringLength = str.length();
56+
for (int i = 0; i < stringLength; i++) {
57+
58+
char character = str.charAt(i);
59+
if (!(character >= 'a' && character <= 'z')) {
4560
return false;
4661
}
47-
checker |= (1 << charValue);
62+
63+
int characterIndex = character - 'a';
64+
int singleBitOnPosition = 1 << characterIndex ;
65+
66+
if ((checker & singleBitOnPosition) > 0) {
67+
return false;
68+
}
69+
70+
checker |= singleBitOnPosition; // checker = checker | singleBitOnPosition;
4871
}
4972
return true;
5073
}
@@ -58,11 +81,11 @@ public static void main(String[] args) {
5881
System.out.println(isAllCharactersUniqueAndInASCII(s));
5982
System.out.println("-------");
6083
s = "ram";
61-
System.out.println(hasAllUniqueCharactersWhenStringContainsAllLowercase(s));
84+
System.out.println(isAllCharactersUniqueAndLowercaseAndInAlphabet(s));
6285
s = "rama";
63-
System.out.println(hasAllUniqueCharactersWhenStringContainsAllLowercase(s));
86+
System.out.println(isAllCharactersUniqueAndLowercaseAndInAlphabet(s));
6487
// not working as the input contains different cases
6588
s = "ramA";
66-
System.out.println(hasAllUniqueCharactersWhenStringContainsAllLowercase(s));
89+
System.out.println(isAllCharactersUniqueAndLowercaseAndInAlphabet(s));
6790
}
6891
}

src/main/test/com/ctci/arraysandstrings/IsUniqueTest.java

+113-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ public class IsUniqueTest {
66

77
@Nested
88
@DisplayName("Test cases for isAllCharactersUniqueAndInASCII()")
9-
class TestCasesForIsAllCharactersUniqueAndInASCII{
9+
class TestCasesForIsAllCharactersUniqueAndInASCII {
1010

1111
@Test
1212
public void isAllCharactersUniqueAndInASCII_StringIsNull_ReturnFalse() {
@@ -109,4 +109,116 @@ public void isAllCharactersUniqueAndInASCII_ValidString_ReturnTrue() {
109109
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"));
110110
}
111111
}
112+
113+
@Nested
114+
@DisplayName("Test cases for isAllCharactersUniqueAndLowercaseAndInAlphabet()")
115+
class TestCasesForIsAllCharactersUniqueAndLowercaseAndInAlphabet {
116+
117+
@Test
118+
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_StringIsNull_ReturnFalse() {
119+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(null));
120+
}
121+
122+
@Test
123+
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_StringIsEmpty_ReturnFalse() {
124+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(""));
125+
}
126+
127+
@Test
128+
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_StringLengthSmallerOrEqual26_ReturnFalse() {
129+
StringBuilder stringBuilder = new StringBuilder();
130+
131+
for (int i = 97; i <= 122; i++) { // 'a' -> 'z'
132+
stringBuilder.append((char) i);
133+
}
134+
Assertions.assertTrue(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(stringBuilder.toString()));
135+
136+
stringBuilder.setLength(0);
137+
for (int i = 100; i <= 120; i++) { // 'a' -> 'z'
138+
stringBuilder.append((char) i);
139+
}
140+
Assertions.assertTrue(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(stringBuilder.toString()));
141+
}
142+
143+
@Test
144+
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_StringLengthLargerThan26_ReturnFalse() {
145+
String a2z = "abcdefghijklmnopqrstuvwxyz";
146+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(a2z + (char) 96)); // 96 => `
147+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(a2z + (char) 123)); // 123 => {
148+
}
149+
150+
@Test
151+
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_Beyond_a2z_ReturnFalse() {
152+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("GH@"));
153+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("{} "));
154+
155+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ááb"));
156+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ÁÁb"));
157+
158+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("1123456"));
159+
}
160+
161+
@Test
162+
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_DuplicateAtHead_ReturnFalse() {
163+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("aab"));
164+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("AAb"));
165+
166+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ááb"));
167+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ÁÁb"));
168+
169+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("1123456"));
170+
}
171+
172+
@Test
173+
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_DuplicateAtMiddle_ReturnFalse() {
174+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("abcbd"));
175+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("aBcBd"));
176+
177+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("aưcưd"));
178+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("aƯcƯd"));
179+
180+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("123436"));
181+
}
182+
183+
@Test
184+
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_DuplicateAtTail_ReturnFalse() {
185+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("aba"));
186+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("AbA"));
187+
188+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ăbă"));
189+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ĂbĂ"));
190+
191+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("1234566"));
192+
}
193+
194+
@Test
195+
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_OnlyOneCharacter_ReturnTrue() {
196+
for (int i = 97; i <= 122; i++) {
197+
Assertions.assertTrue(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(String.valueOf((char) i)));
198+
}
199+
}
200+
201+
@Test
202+
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_OnlyOneCharacter_ReturnFalse() {
203+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("A"));
204+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("á"));
205+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("Ô"));
206+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("€"));
207+
}
208+
209+
@Test
210+
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_InvalidString_ReturnFalse() {
211+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ۇ"));
212+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("áÂ"));
213+
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("aB"));
214+
}
215+
216+
@Test
217+
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_ValidString_ReturnTrue() {
218+
Assertions.assertTrue(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("mwq"));
219+
Assertions.assertTrue(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("fwoklt"));
220+
Assertions.assertTrue(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("abcdefghijklmnopqrstuvwxyz"));
221+
}
222+
}
223+
112224
}

0 commit comments

Comments
 (0)