zoukankan      html  css  js  c++  java
  • Java for LeetCode 131 Palindrome Partitioning

     Given a string s, partition s such that every substring of the partition is a palindrome.

    Return all possible palindrome partitioning of s.

    For example, given s = "aab",
    Return

      [
        ["aa","b"],
        ["a","a","b"]
      ]
    解题思路一:

    将s分为左右两个部分,分别求出两边的partition,然后粘一块即可,JAVA实现如下:

    	static public List<List<String>> partition(String s) {
    		Set<List<String>> set = new HashSet<List<String>>();
    		if (isPalindrome(s)) {
    			List<String> alist = new ArrayList<String>();
    			alist.add(s);
    			set.add(alist);
    		}
    		for (int i = 1; i < s.length(); i++) {
    			List<List<String>> left = partition(s.substring(0, i));
    			List<List<String>> right = partition(s.substring(i, s.length()));
    			for (List<String> aLeft : left)
    				for (List<String> aRight : right) {
    					List<String> alist = new ArrayList<String>(aLeft);
    					alist.addAll(aRight);
    					set.add(new ArrayList<String>(alist));
    				}
    		}
    		return new ArrayList<List<String>>(set);
    	}
    
    	static boolean isPalindrome(String s) {
    		int left = 0;
    		int right = s.length() - 1;
    		while (left < right) 
    			if (s.charAt(left++) != s.charAt(right--))
    				return false;
    		return true;
    	}
    

     结果TLE

    解题思路二:

     修改下思路一,从左边入手,如果左边是Palindrome,对右边求一个partition,这样求得的结果也不会重复,这样就可以AC了,JAVA实现如下:

    	static public List<List<String>> partition(String s) {
    		ArrayList<List<String>> list = new ArrayList<List<String>>();
    		if (isPalindrome(s)) {
    			List<String> alist = new ArrayList<String>();
    			alist.add(s);
    			list.add(alist);
    		}
    		for (int i = 1; i < s.length(); i++)
    			if (isPalindrome(s.substring(0, i))) {
    				List<String> aLeft = new ArrayList<String>();
    				aLeft.add(s.substring(0, i));
    				List<List<String>> right = partition(s.substring(i, s.length()));
    				for (List<String> aRight : right) {
    					List<String> alist = new ArrayList<String>(aLeft);
    					alist.addAll(aRight);
    					list.add(new ArrayList<String>(alist));
    				}
    			}
    		return list;
    	}
    
    	static boolean isPalindrome(String s) {
    		int left = 0;
    		int right = s.length() - 1;
    		while (left < right)
    			if (s.charAt(left++) != s.charAt(right--))
    				return false;
    		return true;
    	}
    
  • 相关阅读:
    2019 SDN上机第一次作业
    软件工程实践2019第五次作业
    软件工程实践2019第四次作业
    软件工程实践2019第三次作业
    软件工程实践2019第二次作业
    软件工程实践2019第一次作业
    第十周Java总结
    第九周课程总结&实验报告
    第八周课程总结&实验报告
    第七周课程总结&实验报告
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4544612.html
Copyright © 2011-2022 走看看