给定一个字符串,找出最多有多少个chunked palindrome, 正常的palindrome是abccba, chunked palindrome的定义是:比如volvo, 可以把vo划分在一起,(vo) (l) (vo),那么它是个palindrome。求实现返回最大的chunk 数量。 比如aaaaaa可以是(aaa)(aaa), 但是最大chunk数量应该是(a)(a)(a)(a)(a)(a)为6
这就是一个greedy的问题,从string的两边开始,用i和j记录当前scan到的位置,用prev_i和prev_j记录上一次找到chunk的i和j的位置的下一个字符。最后扫到中间判断一下有无多余的chunk。
时间复杂度为O(N^2), 内层string.equals 有O(N)复杂度
1 package ChunkedPalindrome; 2 3 public class Solution { 4 public int countChunk(String str) { 5 if (str==null || str.length()==0) return 0; 6 int sum = 0; 7 int l=0, r=str.length()-1; 8 int preL = l, preR = r; 9 while (l < r) { 10 String left = str.substring(preL, l+1); 11 String right = str.substring(r, preR+1); 12 if (left.equals(right)) { 13 preL = l+1; 14 preR = r-1; 15 sum += 2; 16 } 17 l++; 18 r--; 19 } 20 if (preL <= preR) sum+=1; 21 return sum; 22 } 23 24 25 /** 26 * @param args 27 */ 28 public static void main(String[] args) { 29 // TODO Auto-generated method stub 30 Solution sol = new Solution(); 31 int res = sol.countChunk("aaaaaa"); 32 System.out.println(res); 33 } 34 35 }
时间: 2024-10-19 09:43:22