Leetcode 139. Divisão de palavras e Leetcode 55. Jogo de salto [Pesquisa em ordem inversa]

Leetcode 139. Divisão de palavras

Descrição do problema

Dada uma string não vazia s e um wordDict do dicionário que contêm uma lista de palavras não vazias, determine se s pode ser dividido em uma ou mais palavras que aparecem no dicionário por espaços.

Descrição:

  • Você pode reutilizar as palavras no dicionário ao dividir.
  • Você pode assumir que não há palavras duplicadas no dicionário.

Entrada: s = "leetcode", wordDict = ["leet", "code"]
Saída:true

Relatório de solução de problemas

dp[i]Indica se so 0primeiro caractere para o iprimeiro caractere na sequência pode ser dividido.

Determinar dp[i]se dividir a partir i-1da 0pesquisa inversa, se houver dp[j], pode ser dividida e o primeiro jpersonagem para o primeiro icarácter da personagem Jane composição pode ser encontrado em um dicionário.

Código de implementação

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        int n=s.size();
        set<string>setWords;
        for(int i=0;i<wordDict.size();i++){
            setWords.insert(wordDict[i]);
        }
        vector<int>dp(n+1,0);
        dp[0]=1;
        for(int i=1;i<=n;i++){
            for(int j=i-1;j>=0;j--){
                if(dp[j]&&setWords.find(s.substr(j,i-j))!=setWords.end()){
                    dp[i]=1;
                    break;
                }
            }
        }
        return dp[n];
    }
};

Referências

[1] Leetcode jumping game
[2] Área de problemas bonheur

Leetcode 55. Jogo de salto

Descrição do problema

Dada uma matriz de números inteiros não negativos, você está inicialmente na primeira posição da matriz.

Cada elemento da matriz representa o comprimento máximo que você pode pular nessa posição.

Determine se você pode alcançar a última posição.

Relatório de solução de problemas

dp[i]Indica ise a primeira posição está acessível.

Quando é determinado dp[i]se acessível a partir i-1da 0pesquisa inversa, se houver dp[j], e até a suaj+num[j]>=i

Código de implementação

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int n=nums.size();
        if(n==1){
            return 1;
        }
        vector<int>dp(n,0);
        dp[0]=1;
        for(int i=0;i<n;i++){
            for(int j=i-1;j>=0;j--){
                if(dp[j]&&j+nums[j]>=i){
                    dp[i]=1;
                    break;
                }
            }
        }
        return dp[n-1];
    }
};

Referências

[1] Leetcode 55. Jogo de salto

MD_
Publicado 139 artigos originais · elogiados 8 · 10.000+ visualizações

Acho que você gosta

Origin blog.csdn.net/qq_27690765/article/details/105347058
Recomendado
Clasificación