zoukankan      html  css  js  c++  java
  • 1593. 拆分字符串使唯一子字符串的数目最大-dfs-中等

    问题描述

    给你一个字符串 s ,请你拆分该字符串,并返回拆分后唯一子字符串的最大数目。

    字符串 s 拆分后可以得到若干 非空子字符串 ,这些子字符串连接后应当能够还原为原字符串。但是拆分出来的每个子字符串都必须是 唯一的 。

    注意:子字符串 是字符串中的一个连续字符序列。

    示例 1:

    输入:s = "ababccc"
    输出:5
    解释:一种最大拆分方法为 ['a', 'b', 'ab', 'c', 'cc'] 。像 ['a', 'b', 'a', 'b', 'c', 'cc'] 这样拆分不满足题目要求,因为其中的 'a' 和 'b' 都出现了不止一次。
    示例 2:

    输入:s = "aba"
    输出:2
    解释:一种最大拆分方法为 ['a', 'ba'] 。
    示例 3:

    输入:s = "aa"
    输出:1
    解释:无法进一步拆分字符串。
     

    提示:

    1 <= s.length <= 16

    s 仅包含小写英文字母

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/split-a-string-into-the-max-number-of-unique-substrings

    解答

    //画出递归树,然后dfs
    class Solution {
        Map<String, Integer> subs;
        int max;
        public void dfs(String s, int start){
            if(start == s.length()){
                // for(Map.Entry<String,Integer> entry:subs.entrySet()){
                //     System.out.println(entry.getKey()+":"+entry.getValue()+"--->"+subs.keySet().size());
                // }
                // System.out.println();
                int len = subs.keySet().size();
                if(len > max)max = len;
                return;
            }
            for(int i=start;i<s.length();i++){
                String temp = s.substring(start,i+1);
                if(!subs.containsKey(temp))subs.put(temp, 1);
                else continue;
                dfs(s, i+1);
                if(subs.containsKey(temp))subs.remove(temp);
            }
        }
        public int maxUniqueSplit(String s) {
            int len=s.length();
            if(len<=1)return len;
            subs = new HashMap<String, Integer>();
            max = Integer.MIN_VALUE;
            for(int i=0;i<s.length();i++){
                String temp = s.substring(0,i+1);
                subs.put(temp, 1);
                dfs(s, i+1);
                subs.remove(temp);
            }
            return max;
        }
    }
  • 相关阅读:
    ubuntu12.04启动系统时报错
    TCP&HTTP协议详解
    nginx日志分析、切割与防盗链
    Nginx Rewrite规则详解
    nginx location深入剖析
    hadoop自动安装脚本
    极易中文分词
    朴素贝叶斯算法分析及java 实现
    随机森林(Random Forest)
    ubuntu 13.04 安装 JDK
  • 原文地址:https://www.cnblogs.com/xxxxxiaochuan/p/13704652.html
Copyright © 2011-2022 走看看