Нет единственные решение на здесь, которое принимает во внимание, что палиндром может также быть основан на единицах слова, не только символьных единицах.
то, Что означает, что ни одно из данных решений не возвращает true для палиндромов как "Девочка, купающаяся на Бикини, следя за мальчиком, видит, что мальчик следит за бикини на купающейся девочке".
Вот является взломанный вместе версией в C#. Я уверен, что этому не нужен regexes, но это действительно работает точно также с вышеупомянутым палиндромом бикини, как это делает с "Человеком, планом, Панама канала!".
static bool IsPalindrome(string text)
{
bool isPalindrome = IsCharacterPalindrome(text);
if (!isPalindrome)
{
isPalindrome = IsPhrasePalindrome(text);
}
return isPalindrome;
}
static bool IsCharacterPalindrome(string text)
{
String clean = Regex.Replace(text.ToLower(), "[^A-z0-9]", String.Empty, RegexOptions.Compiled);
bool isPalindrome = false;
if (!String.IsNullOrEmpty(clean) && clean.Length > 1)
{
isPalindrome = true;
for (int i = 0, count = clean.Length / 2 + 1; i < count; i++)
{
if (clean[i] != clean[clean.Length - 1 - i])
{
isPalindrome = false; break;
}
}
}
return isPalindrome;
}
static bool IsPhrasePalindrome(string text)
{
bool isPalindrome = false;
String clean = Regex.Replace(text.ToLower(), @"[^A-z0-9\s]", " ", RegexOptions.Compiled).Trim();
String[] words = Regex.Split(clean, @"\s+");
if (words.Length > 1)
{
isPalindrome = true;
for (int i = 0, count = words.Length / 2 + 1; i < count; i++)
{
if (words[i] != words[words.Length - 1 - i])
{
isPalindrome = false; break;
}
}
}
return isPalindrome;
}
Уф, я думал, что схожу с ума. Я знал, что прочитал хорошую статью о том, как это сделать, но не нашел ее.
Вот она, Альфа работает.
http://www.ibm.com/developerworks/opensource/library /os-eclipse-custwiz/index.html[1239 visible