Тема Описание:
Получая строку s, s делится на ряд подгрупп строк, каждая подстрока является строка палиндром.
S вернуть все возможные схемы разделения.
Пример:
输入: "AAB"
输出:
[
[ "аа", "б"],
[ "а", "а", "б"]
]
Источник: остаться кнопка (LeetCode)
ссылка: https: //leetcode-cn.com/problems/palindrome-partitioning
Проблема решения идеи:
1, по-видимому, возвраты: сделать все возможные исходы и результатом является List <List <>> типа.
2, так что этот вопрос и искать подмножество очень похож на каждое своем собственное знание, чтобы быть судья не является строка палиндрома.
3, отметим, что функция определяется с использованием обратного huisu (INT начала Int конца, String цель) для облегчения обработки строки
Java-код для достижения следующих
1 // 回文字符判断 2 общественного булево isPalindrome (String с, INT начало, ИНТ конец) { 3 , а (начало < конец) { 4 , если (s.charAt (старт)! = S.charAt (конец)) 5 возврата ложь ; 6 начать ++ ; 7 end-- ; 8 } 9 возврата истинно ; 10 } 11 12 общественности List <List <String >> раздел (String s) { 13 //求出所有子集 14 // 判断是不是回文 15 List <List <String >> результат = новый ArrayList <> (); 16 List <String> Темп = новый ArrayList <> (); 17 часть (результат, темп, с, 0 ); 18 возврата результата; 19 } 20 21 общественная аннулируются часть (List <List <String >> результат List <String> Темп, String s, Int начинаются) { 22 , если (начало == s.length ()) { 23 result.add ( новый ArrayList (температура)); //Нужно сначала подать заявку на память, в противном случае это ссылка на добавленный результат возвращается пустой. 24- возврат ; // обработка завершена , мы должны вернуться! ! ! 25 } 26 для ( INT I = Бегин; I <s.length (); я ++ ) { 27 ЕСЛИ (isPalindrome (S, то начала я)) { 28 temp.add (s.substring (Бегина, I + 1. )) ; 29 Часть (Результат, ТЕМП, S, I + 1. ); 30 temp.remove (temp.size () - 1. ); 31 } 34 }