Skip to content

Add test cases for isAllCharactersUniqueAndLowercaseAndInAlphabet() #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 31 additions & 8 deletions src/main/java/com/ctci/arraysandstrings/IsUnique.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,37 @@ public static boolean isAllCharactersUniqueAndInASCII(String str) {
return true;
}

private static boolean hasAllUniqueCharactersWhenStringContainsAllLowercase(String s) {
/**
* Check whether the input string contains different individual characters, lowercase
* and in between 'a' and 'z'
*
* @param str Input string
* @return true if all characters are different from each other,lowercase and between 'a' and 'z', otherwise false.
*/
public static boolean isAllCharactersUniqueAndLowercaseAndInAlphabet(String str) {
if (str == null
|| str.isEmpty()
|| str.length() > 26) {
return false;
}

int checker = 0;
for (int i = 0; i < s.length(); i++) {
int charValue = s.charAt(i) - 'a';
if ((checker & (1 << charValue)) > 0) {
int stringLength = str.length();
for (int i = 0; i < stringLength; i++) {

char character = str.charAt(i);
if (!(character >= 'a' && character <= 'z')) {
return false;
}
checker |= (1 << charValue);

int characterIndex = character - 'a';
int singleBitOnPosition = 1 << characterIndex ;

if ((checker & singleBitOnPosition) > 0) {
return false;
}

checker |= singleBitOnPosition; // checker = checker | singleBitOnPosition;
}
return true;
}
Expand All @@ -58,11 +81,11 @@ public static void main(String[] args) {
System.out.println(isAllCharactersUniqueAndInASCII(s));
System.out.println("-------");
s = "ram";
System.out.println(hasAllUniqueCharactersWhenStringContainsAllLowercase(s));
System.out.println(isAllCharactersUniqueAndLowercaseAndInAlphabet(s));
s = "rama";
System.out.println(hasAllUniqueCharactersWhenStringContainsAllLowercase(s));
System.out.println(isAllCharactersUniqueAndLowercaseAndInAlphabet(s));
// not working as the input contains different cases
s = "ramA";
System.out.println(hasAllUniqueCharactersWhenStringContainsAllLowercase(s));
System.out.println(isAllCharactersUniqueAndLowercaseAndInAlphabet(s));
}
}
114 changes: 113 additions & 1 deletion src/main/test/com/ctci/arraysandstrings/IsUniqueTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ public class IsUniqueTest {

@Nested
@DisplayName("Test cases for isAllCharactersUniqueAndInASCII()")
class TestCasesForIsAllCharactersUniqueAndInASCII{
class TestCasesForIsAllCharactersUniqueAndInASCII {

@Test
public void isAllCharactersUniqueAndInASCII_StringIsNull_ReturnFalse() {
Expand Down Expand Up @@ -109,4 +109,116 @@ public void isAllCharactersUniqueAndInASCII_ValidString_ReturnTrue() {
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"));
}
}

@Nested
@DisplayName("Test cases for isAllCharactersUniqueAndLowercaseAndInAlphabet()")
class TestCasesForIsAllCharactersUniqueAndLowercaseAndInAlphabet {

@Test
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_StringIsNull_ReturnFalse() {
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(null));
}

@Test
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_StringIsEmpty_ReturnFalse() {
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(""));
}

@Test
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_StringLengthSmallerOrEqual26_ReturnFalse() {
StringBuilder stringBuilder = new StringBuilder();

for (int i = 97; i <= 122; i++) { // 'a' -> 'z'
stringBuilder.append((char) i);
}
Assertions.assertTrue(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(stringBuilder.toString()));

stringBuilder.setLength(0);
for (int i = 100; i <= 120; i++) { // 'a' -> 'z'
stringBuilder.append((char) i);
}
Assertions.assertTrue(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(stringBuilder.toString()));
}

@Test
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_StringLengthLargerThan26_ReturnFalse() {
String a2z = "abcdefghijklmnopqrstuvwxyz";
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(a2z + (char) 96)); // 96 => `
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(a2z + (char) 123)); // 123 => {
}

@Test
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_Beyond_a2z_ReturnFalse() {
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("GH@"));
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("{} "));

Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ááb"));
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ÁÁb"));

Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("1123456"));
}

@Test
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_DuplicateAtHead_ReturnFalse() {
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("aab"));
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("AAb"));

Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ááb"));
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ÁÁb"));

Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("1123456"));
}

@Test
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_DuplicateAtMiddle_ReturnFalse() {
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("abcbd"));
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("aBcBd"));

Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("aưcưd"));
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("aƯcƯd"));

Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("123436"));
}

@Test
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_DuplicateAtTail_ReturnFalse() {
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("aba"));
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("AbA"));

Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ăbă"));
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ĂbĂ"));

Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("1234566"));
}

@Test
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_OnlyOneCharacter_ReturnTrue() {
for (int i = 97; i <= 122; i++) {
Assertions.assertTrue(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet(String.valueOf((char) i)));
}
}

@Test
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_OnlyOneCharacter_ReturnFalse() {
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("A"));
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("á"));
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("Ô"));
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("€"));
}

@Test
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_InvalidString_ReturnFalse() {
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("ۇ"));
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("áÂ"));
Assertions.assertFalse(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("aB"));
}

@Test
public void isAllCharactersUniqueAndLowercaseAndInAlphabet_ValidString_ReturnTrue() {
Assertions.assertTrue(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("mwq"));
Assertions.assertTrue(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("fwoklt"));
Assertions.assertTrue(IsUnique.isAllCharactersUniqueAndLowercaseAndInAlphabet("abcdefghijklmnopqrstuvwxyz"));
}
}

}