Насколько я понял эту проблему, мы можем найти палиндромы вокруг центрального индекса и развернуть наш поиск в обоих направлениях, справа и слева от центра. Учитывая это и зная, что на углах ввода нет палиндрома, мы можем установить границы на 1 и длину-1. Обращая внимание на минимальную и максимальную границы String, мы проверяем, совпадают ли символы в положениях симметричных индексов (справа и слева) для каждого центрального положения, пока мы не достигнем нашего максимального верхнего граничного центра.
Внешний цикл равен O (n) (max n-2 итерации), а внутренний цикл while - O (n) (max вокруг (n / 2) - 1 итераций)
Вот мой Java, используя пример, предоставленный другими пользователями.
class LongestPalindrome {
/**
* @param input is a String input
* @return The longest palindrome found in the given input.
*/
public static String getLongestPalindrome(final String input) {
int rightIndex = 0, leftIndex = 0;
String currentPalindrome = "", longestPalindrome = "";
for (int centerIndex = 1; centerIndex < input.length() - 1; centerIndex++) {
leftIndex = centerIndex - 1; rightIndex = centerIndex + 1;
while (leftIndex >= 0 && rightIndex < input.length()) {
if (input.charAt(leftIndex) != input.charAt(rightIndex)) {
break;
}
currentPalindrome = input.substring(leftIndex, rightIndex + 1);
longestPalindrome = currentPalindrome.length() > longestPalindrome.length() ? currentPalindrome : longestPalindrome;
leftIndex--; rightIndex++;
}
}
return longestPalindrome;
}
public static void main(String ... args) {
String str = "HYTBCABADEFGHABCDEDCBAGHTFYW12345678987654321ZWETYGDE";
String longestPali = getLongestPalindrome(str);
System.out.println("String: " + str);
System.out.println("Longest Palindrome: " + longestPali);
}
}
Выход этого параметра следующий:
marcello:datastructures marcello$ javac LongestPalindrome
marcello:datastructures marcello$ java LongestPalindrome
String: HYTBCABADEFGHABCDEDCBAGHTFYW12345678987654321ZWETYGDE
Longest Palindrome: 12345678987654321
Я сделал 35 минимальных видео и показал некоторые примеры начинающего DTrace, что можно найти здесь: http://cocoasamurai.blogspot.com/2008/05/dtrace-for-cocoa-developers.html , которые были предназначены для представления DTrace Разработчикам Какао, но это может работать на кого-либо действительно
Я нашел, что чтение dtrace версия обычных администраторских контрольных инструментов Mac OS X было большой справкой truss
-> dtruss
. Существует по крайней мере дюжина различных сценариев, которые можно прочитать. (Большая часть начала "d".)
также существует /Developer/Applications/Instruments.app
, который является графическим приложением, которое генерирует dtrace сценарии.
кроме того, Википедия страница DTrace имеет загрузки ссылок, которые должны помочь.
Можно также попробовать "dtrace инструментарий", он имеет сценарии для большого количества контролирующих целей дать Вам, удар запускается.
Также можно присоединить "Инструменты" XCode к любому процессу. После того, как это дает Вам общее представление о Вашем приложении, которое можно дать попытке записать собственные сценарии
Посмотрите видео Brian Cantrill DTrace. Это - большой основанный на демонстрации разговор, и Cantrill является одним из создателей DTrace.
http://video.google.com/videoplay?docid=-8002801113289007228