work break II

import java.util.List;//超时
import java.util.Set;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
public class Solution {
    private int dict_size_min=Integer.MAX_VALUE;
    private int dict_size_max=-1;
    private HashMap<String,Set<String>> hashMap=new HashMap();
    public List<String> wordBreak(String s, List<String> wordDict) {
        int start=0;
        int end=s.length();
        for(String str:wordDict)
        {
            if(str.length()<dict_size_min)
            {
                dict_size_min=str.length();
            }
            if(str.length()>dict_size_max)
            {
                dict_size_max=str.length();
            }
        }

        Set<String> sen=returnWords(s,wordDict,start,end);


        return new ArrayList<>(sen);

    }
    private Set<String> returnWords(String s,List<String> wordDict,int start,int end) {
        int strLen=end-start;
        String str=s.substring(start,end);
        Set<String> results=hashMap.get(str);
        if(results!=null)
        {
            return results;
        }

        Set<String> cur=new HashSet<>();
        if(strLen<=dict_size_max&&strLen>=dict_size_min)
        {

            String word=findWordInDict(str,wordDict);
            if(word!=null)
            {
                cur.add(word);
            }



        }

        if(strLen>dict_size_min)
        {

            for(int i=start+1;i<end;i++)
            {
                Set<String> f1=returnWords(s, wordDict, start, i);
                Set<String> f2=returnWords(s, wordDict, i, end);
                if(f1==null||f2==null)
                {
                    continue;
                }
                for(String str1:f1)
                {
                    for(String str2:f2)
                    {
                        cur.add(str1+" "+str2);
                    }
                }

            }


        }
        hashMap.put(str,cur );
        return cur;

    }
    private String findWordInDict(String str,List<String> wordDict)
    {
        for(String word:wordDict)
        {
            if(str.equals(word))
            {
                return str;
            }
        }
        return null;
    }
}

考虑了很多重复情况:
s=”abc”
dict={“a”,”b”,”c”}
f(0,3)=f(0,1)*f(1,3)+f(0,2)*f(2,3)+f(0,3)*f(3,3)
结果只有a b c
但是三个子问题都会得出这个值,重复计算。

应该以找出s为出发点。

import java.util.List;
import java.util.Set;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;


public class Solution {
    private int dict_size_min = Integer.MAX_VALUE;
    private int dict_size_max = -1;
    private HashMap<String, Set<String>> hashMap = new HashMap();

    public List<String> wordBreak(String s, List<String> wordDict) {

        for (String str : wordDict) {
            if (str.length() < dict_size_min) {
                dict_size_min = str.length();
            }
            if (str.length() > dict_size_max) {
                dict_size_max = str.length();
            }
        }

        Set<String> senSet=returnWords(s, wordDict, 0);


        return  new ArrayList<>(senSet);

    }

    private Set<String> returnWords(String s, List<String> wordDict, int start) {
        if (start == s.length()) {
            Set<String> set = new HashSet<>();
            set.add("");
            return set;
        }

        String str = s.substring(start, s.length());
        if (hashMap.containsKey(str)) {
            return hashMap.get(str);
        }


        HashSet<String> hashSet = new HashSet<>();

        for (int j = start; j <= start + dict_size_max && j <= s.length(); j++) {
            if (j - start < dict_size_min) {
                continue;
            }

            String lookupStr = s.substring(start, j);

            String word = findWordInDict(lookupStr, wordDict);
            if (word != null) {
                Set<String> remainWords = returnWords(s, wordDict, j);

                for (String remain : remainWords) {
                    if (remain.equals("")) {
                        hashSet.add(word);
                    } else {
                        hashSet.add(word + " " + remain);
                    }


                }


            }
        }
        hashMap.put(str, hashSet);
        return hashSet;


    }

    private String findWordInDict(String str, List<String> wordDict) {
        for (String word : wordDict) {
            if (str.equals(word)) {
                return str;
            }
        }
        return null;
    }
}
帮我把下列代码的case后内容和 “nStepMode =” 后的内容进行调换 switch (nThirdStepMode) { case PM_UNKNOWN_MODE: { // 无法识别的第三方工步号 return false; } break; case PM_STEP_REST: { nStepMode = WORK_HOLD; } break; case PM_STEP_RANDOM_REST: { nStepMode = WORK_HOLD_RANDOM; } break; case PM_STEP_SYN_SUSPEND: { // 无法识别的第三方工步号 return false; } break; case PM_STEP_PAUSE: { nStepMode = WORK_PAUSE; } break; case PM_STEP_STOP_X: { // 无法识别的第三方工步号 return false; } break; case PM_CONST_POWER_CHARGE: { nStepMode = WORK_CP; } break; case PM_CONST_POWER_DISCHARGE: { nStepMode = WORK_DP; } break; case PM_CONST_RESISTANCE_CHARGE: { nStepMode = WORK_CR; } break; case PM_CONST_RESISTANCE_DISCHARGE: { nStepMode = WORK_DR; } break; case PM_STEP_INCUBATOR_LINK: { // TODO:处理 温箱联动 return false; } break; case PM_CONST_CURRENT_CHARGE: { nStepMode = WORK_CC; } break; case PM_CONST_CURRENT_DISCHARGE: { nStepMode = WORK_DC; } break; case PM_STEP_C_RATE_CHARGE: { nStepMode = WORK_CRATE; } break; case PM_STEP_C_RATE_DISCHARGE: { nStepMode = WORK_DRATE; } break; case PM_STEP_CCCV_CHARGE: // carefully! { nStepMode = WORK_CCCV; } break; case PM_STEP_CCCV_DISCHARGE: // carefully! { nStepMode = WORK_DCDV; } break; case PM_CONST_VOLT_CHARGE: { nStepMode = WORK_CV; } break; case PM_CONST_VOLT_DISCHARGE: // support lmtPara from V7206 { nStepMode = WORK_DV; } break; case PM_STEP_RATE_CV_CHARGE: { nStepMode = WORK_CRATECV; } break; case PM_STEP_RATE_CV_DISCHARGE: { nStepMode = WORK_DRATEDV; } break; case PM_STEP_CPCV_CHARGE: { nStepMode = WORK_CPCV; } break; case PM_STEP_CPCV_DISCHARGE: { nStepMode = WORK_DPDV; } break; case PM_STEP_LOOP: { nStepMode = WORK_WHILE; } break; default: { // 无法识别的第三方工步号 return false; } break; }
05-29
帮我把下列代码的PM_XXX内容和 WORK_XXX 内容的位置进行调换 switch (nThirdStepMode) { case PM_UNKNOWN_MODE: { // 无法识别的第三方工步号 return false; } break; case PM_STEP_REST: { nStepMode = WORK_HOLD; } break; case PM_STEP_RANDOM_REST: { nStepMode = WORK_HOLD_RANDOM; } break; case PM_STEP_SYN_SUSPEND: { // 无法识别的第三方工步号 return false; } break; case PM_STEP_PAUSE: { nStepMode = WORK_PAUSE; } break; case PM_STEP_STOP_X: { // 无法识别的第三方工步号 return false; } break; case PM_CONST_POWER_CHARGE: { nStepMode = WORK_CP; } break; case PM_CONST_POWER_DISCHARGE: { nStepMode = WORK_DP; } break; case PM_CONST_RESISTANCE_CHARGE: { nStepMode = WORK_CR; } break; case PM_CONST_RESISTANCE_DISCHARGE: { nStepMode = WORK_DR; } break; case PM_STEP_INCUBATOR_LINK: { // TODO:处理 温箱联动 return false; } break; case PM_CONST_CURRENT_CHARGE: { nStepMode = WORK_CC; } break; case PM_CONST_CURRENT_DISCHARGE: { nStepMode = WORK_DC; } break; case PM_STEP_C_RATE_CHARGE: { nStepMode = WORK_CRATE; } break; case PM_STEP_C_RATE_DISCHARGE: { nStepMode = WORK_DRATE; } break; case PM_STEP_CCCV_CHARGE: // carefully! { nStepMode = WORK_CCCV; } break; case PM_STEP_CCCV_DISCHARGE: // carefully! { nStepMode = WORK_DCDV; } break; case PM_CONST_VOLT_CHARGE: { nStepMode = WORK_CV; } break; case PM_CONST_VOLT_DISCHARGE: // support lmtPara from V7206 { nStepMode = WORK_DV; } break; case PM_STEP_RATE_CV_CHARGE: { nStepMode = WORK_CRATECV; } break; case PM_STEP_RATE_CV_DISCHARGE: { nStepMode = WORK_DRATEDV; } break; case PM_STEP_CPCV_CHARGE: { nStepMode = WORK_CPCV; } break; case PM_STEP_CPCV_DISCHARGE: { nStepMode = WORK_DPDV; } break; case PM_STEP_LOOP: { nStepMode = WORK_WHILE; } break; default: { // 无法识别的第三方工步号 return false; } break; }
最新发布
05-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值