定义:
回文是指一个单词、短语、数字或其他序列,在正反方向上读取时具有相同的属性。
如何检查给定的字符串是否是回文?
这曾经是一道常见面试问题,但大多数情况下使用的是 C 语言。
寻找任何一种语言的解决方案。
回文是指一个单词、短语、数字或其他序列,在正反方向上读取时具有相同的属性。
如何检查给定的字符串是否是回文?
这曾经是一道常见面试问题,但大多数情况下使用的是 C 语言。
寻找任何一种语言的解决方案。
string mystring = "abracadabra";
char[] str = mystring.ToCharArray();
Array.Reverse(str);
string revstring = new string(str);
if (mystring.equals(revstring))
{
Console.WriteLine("String is a Palindrome");
}
在Ruby中,将字符串转换为小写并去除所有非字母字符:
def isPalindrome( string )
( test = string.downcase.gsub( /[^a-z]/, '' ) ) == test.reverse
end
但这感觉就像作弊一样,对吧?没有指针或任何东西!因此,这里也有一个 C 版本,但没有小写和字符剥离的优点:
#include <stdio.h>
int isPalindrome( char * string )
{
char * i = string;
char * p = string;
while ( *++i ); while ( i > p && *p++ == *--i );
return i <= p && *i++ == *--p;
}
int main( int argc, char **argv )
{
if ( argc != 2 )
{
fprintf( stderr, "Usage: %s <word>\n", argv[0] );
return -1;
}
fprintf( stdout, "%s\n", isPalindrome( argv[1] ) ? "yes" : "no" );
return 0;
}
好的,那很有趣 - 我能得到这份工作吗 ;^)
Perl:
sub is_palindrome($)
{
$s = lc(shift); # ignore case
$s =~ s/\W+//g; # consider only letters, digits, and '_'
$s eq reverse $s;
}
使用Java,使用Apache Commons字符串工具:
public boolean isPalindrome(String phrase) {
phrase = phrase.toLowerCase().replaceAll("[^a-z]", "");
return StringUtils.reverse(phrase).equals(phrase);
}
我在一个编程挑战中不得不这样做,这是我的Haskell代码片段:
isPalindrome :: String -> Bool
isPalindrome n = (n == reverse n)
Python:
if s == s[::-1]: return True
Java:
if (s.Equals(s.Reverse())) { return true; }
PHP:
if (s == strrev(s)) return true;
Perl:
if (s == reverse(s)) { return true; }
Erlang:
string:equal(S, lists:reverse(S)).
c++:
bool is_palindrome(const string &s)
{
return equal( s.begin(), s.begin()+s.length()/2, s.rbegin());
}
还没有使用 JavaScript 的解决方案吗?
function palindrome(s) {
var l = 0, r = s.length - 1;
while (l < r) if (s.charAt(left++) !== s.charAt(r--)) return false;
return true
}
s === s.split('').reverse().join('')
...赞扬效率 :) - Alex McMillan这是一个简单的JavaScript解决方案。运行代码片段以进行演示。
function checkPalindrome(line){
reverse_line=line.split("").reverse().join("");
return line==reverse_line;
}
alert("checkPalindrome(radar): "+checkPalindrome("radar"));
Perl:
sub is_palindrome {
my $s = lc shift; # normalize case
$s =~ s/\W//g; # strip non-word characters
return $s eq reverse $s;
}