Suppose ‘S’
is a string and ‘R’ is reverse of string S. The string S is funny if the
condition |Si−Si−1|=|Ri−Ri−1| is true for every i from 1 to N−1.
import java.util.Objects; public class FunnyString { public static boolean isFunnyStrings(String str) { Objects.nonNull(str); String reverse = new StringBuilder(str).reverse().toString(); for (int i = 1; i < str.length(); i++) { int diff1 = Math.abs(str.charAt(i) - str.charAt(i - 1)); int diff2 = Math.abs(reverse.charAt(i) - reverse.charAt(i - 1)); if (diff1 != diff2) return false; } return true; } }
Following is
the junit test case for above application.
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Test; public class FunnyStringTest { @Test public void test1() { assertTrue(FunnyString.isFunnyStrings("acxz")); assertFalse(FunnyString.isFunnyStrings("bcxz")); assertTrue(FunnyString.isFunnyStrings("bcxy")); assertTrue(FunnyString.isFunnyStrings("b")); assertTrue(FunnyString.isFunnyStrings("ab")); assertTrue(FunnyString.isFunnyStrings("madam")); assertFalse(FunnyString.isFunnyStrings("acb")); } @Test(expected = NullPointerException.class) public void test2() { FunnyString.isFunnyStrings(null); } }
No comments:
Post a Comment