虚拟主机 多个网站,没有备案的网站,小红书手工,网站网站营销特点131.分割回文串
给你一个字符串 s#xff0c;请你将 s 分割成一些子串#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
示例 1#xff1a;
输入#xff1a;s aab
输出#xff1a;[[a请你将 s 分割成一些子串使每个子串都是 回文串 。返回 s 所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
示例 1
输入s aab
输出[[a,a,b],[aa,b]]示例 2
输入s a
输出[[a]]class Solution {ListListString lists new ArrayList();DequeString deque new LinkedList(); //创建双端队列两端都可进可出public ListListString partition(String s) {backTracking(s, 0);return lists;}private void backTracking(String s, int startIndex) { //传入字符串和分割的起始位置// 如果起始位置大于等于s的大小说明找到了一组分割方分割已到字符串末尾if (startIndex s.length()) {lists.add(new ArrayList(deque)); //将其分割结果记入链表中return;}for (int i startIndex; i s.length(); i) { //startIndex是上一次分割完的位置是固定的i值则继续// 如果是回文子串则记录if (isPalindrome(s, startIndex, i)) {String str s.substring(startIndex, i 1); //结果值取到startIndex到ideque.addLast(str);} else {continue;}// 起始位置后移保证不重复backTracking(s, i 1);deque.removeLast();}}// 判断是否是回文串private boolean isPalindrome(String s, int startIndex, int end) {for (int i startIndex, j end; i j; i, j--) {if (s.charAt(i) ! s.charAt(j)) {return false;}}return true;}
}