Here's my second attempt at solving the same problem using three different languages: JavaScript, Python and Java.
Today's question is to judge whether the given string is a palindrome.
1 The Most Straightforward Solution
JavaScript:
function isPalindrome(str) {
const reversed = str.split('').reverse().join('');
return str === reversed;
}
Python:
def is_palindrome(str):
return str[::-1] == str
Java:
static boolean isPalindrome(String str) {
String reversed = new StringBuilder(str).reverse().toString();
return reversed.equals(str);
}
Note that return reversed == str;
doesn't work because reversed
and str
point to different objects.
2. Elegant (But Redundant)
JavaScript:
function isPalindrome(str) {
return str.split('').every((char, i) => {
return char === str[str.length - i - 1];
});
}
Its Python equivalent, without redundancy, would be perhaps:
def is_palindrome(str):
return all([str[i] == str[-i-1] for i in range(len(str)//2)])
And Java:
static boolean isPalindrome(String str) {
int n = str.length();
return IntStream.range(0, n/2)
.allMatch(i -> str.charAt(i) == str.charAt(n - i - 1));
}
3. An Alternative With a For Loop
JavaScript:
function isPalindrome(str) {
const n = str.length;
for (let i = 0; i < Math.floor(n/2); i++) {
if (str[i] != str[n - i - 1]) {
return false;
}
}
return true;
}
Python:
def is_palindrome(str):
for i in range(len(str)//2):
if str[i] != str[-i-1]:
return False
return True
Java:
static boolean isPalindrome(String str) {
int n = str.length();
for (int i = 0; i < n / 2; i++)
if (str.charAt(i) != str.charAt(n - i - 1)) {
return false;
}
return true;
}
Notes:
5 / 2 is 2.5 in JavaScript and Python 3.
5 / 2 is 2 in Java.
5 // 2 is 2 in Python 3.
References:
https://stackoverflow.com/questions/11758791/python-3-2-palindrome
https://stackoverflow.com/questions/4138827/check-string-for-palindrome
Top comments (0)