Check if the given string is palindrome

Carvia Tech | September 09, 2019 | 2 min read | 51 views | Java Coding Challenges


In this article we will write java code to check if the given input string is palindrome or not.

Palindrome

A palindrome is a word, number, phrase, or other sequence of characters which reads the same backward as forward, such as madam or racecar or the number 10801.

If you are looking for palindrome checker for number instead of a string, then you can follow this article.

Approach

We can take the input string and start comparing its characters using String.charAt(index) from head (first) and tail (last).

  1. If the first character at head is not equal to last char at tail then it is not a palindrome.

  2. If the first character is equal to character at tail we start evaluating the next set of characters, moving the head up by one, and the tail down by one. if all the characters match till head is less than tail, then input string is palindrome.

String Palindrome Checker
public boolean isPalindrome(String input) {
    int head = 0;
    int tail = input.length() - 1;
    while (head < tail) {
        if (input.charAt(head) != input.charAt(tail)) {
            return false;
        }
        head++;
        tail--;
    }
    return true;
}

A slightly compact version of the above implementation would like like below:

Compact version for Palindrome String Checker
public boolean isPalindrome(String input) {
    int length = input.length();
    for (int i = 0; i < length / 2; i++) {
        if ( input.charAt(i) != input.charAt(length - 1 - i)) {
            return false;
        }
    }
    return true;
}

Unit Testing

we can write unit tests for the recently developed palindrome method. Here we will use Gradle + JUnit5 + Kotlin for writing unit test cases.

We will cover the below test scenarios:

  1. Check a palindrome string

  2. Check non-palindrome string

  3. Check null input for proper behavior

  4. Use CSV of values (valid and invalid) and test if each of them is palindrome

Unit test cases for Palindrome
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.CsvSource

class PalindromeCheckerTest {

    @Test
    fun `check a palindrome string`() {
        val checker = PalindromeChecker()
        assertEquals(true, checker.isPalindrome("madam"))
    }

    @Test
    fun `check a non-palindrome string`() {
        val checker = PalindromeChecker()
        assertEquals(false, checker.isPalindrome("namste"))
    }

    @Test
    fun `check null input for palindrome`() {
        val checker = PalindromeChecker()
        val exception = assertThrows<IllegalArgumentException> {
            checker.isPalindrome(null)
        }
        assertEquals("must be supplied a valid input string", exception.message)
    }

    @ParameterizedTest(name = "{0} = {1}")
    @CsvSource(
        "madam,   true",
        "racecar, true",
        "108012,  false",
        "hello,   false"
    )
    fun `csv palindrome checker`(first: String, expectedResult: Boolean) {
        val calculator = PalindromeChecker()
        assertEquals(expectedResult, calculator.isPalindrome(first)) {
            if (expectedResult) {
                "$first is not a palidrome"
            } else {
                "$first is a palidrome"
            }
        }
    }
}

Testcases are mostly self explanatory.

You can download sample project from Github

https://github.com/cancerian0684/junit5-gradle-kotlin-sample


Top articles in this category:
  1. Top 15 coding problems for SDET Java Interviews
  2. Top 50 SDET Java Programming Interview Questions & Answers
  3. SDET: JUnit interview questions for automation engineer
  4. SDET: Rest Assured Interview Questions
  5. How to check if the given number is palindrome in Java
  6. Check whether given number is even or odd
  7. Find longest non-repeating substring from a given string in Java


Find more on this topic:
SDET Interviews image
SDET Interviews

SDET Java Interview pattern and collection of questions covering SDET coding challenges, automation testing concepts, functional, api, integration, performance and security testing, junit5, testng, jmeter, selenium and rest assured

Last updated 1 week ago


Recommended books for interview preparation:

This website uses cookies to ensure you get the best experience on our website. more info