I wonder if there could be a faster palindrome checker in Java. The best one I have is O(n/2) which is O(n) eventually:
public static boolean isPalindromeNaive(String s) {
StringBuilder sb = new StringBuilder(s);
StringBuilder sbReverse = sb.reverse();
if (s.equals(String.valueOf(sbReverse))){
return true;
}
return false;
}
public static boolean isPalindromLessNaive(String s) {
if (s.length()%2==0) {
for (int i = 0; i<(s.length()/2); i++) {
if (s.charAt(i) != s.charAt(s.length() - 1 - i)) {
return false;
}
}
}
else {
for (int i=0; i<(s.length()/2); i++) {
if (s.charAt(i)!=s.charAt(s.length()-1-i)) {
return false;
}
}
}
return true;
}
Also am I correct that my naive method is slower than less naive method? what is the time complexity of StringBuilder
reverse()
method?
// suggestion for code design/pattern(s) are really welcomed!