zoukankan      html  css  js  c++  java
  • G面经prepare: Chucked Palindrome

     给定一个字符串,找出最多有多少个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 }
  • 相关阅读:
    12月10日,小雪
    12月10日,小雪
    BUG
    Twenty Hours
    BUG
    07中华小姐大赛落幕 20岁佳丽曾光夺冠
    Twenty Hours
    jeecg 页面标签规则
    jeecg导入备份
    jeecg查询分页
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/5136947.html
Copyright © 2011-2022 走看看