✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

O algoritmo para tornar as palavras em negrito em HTML

35

Dado um conjunto de palavras-chave e uma string S, faça todas as aparições de todas as palavras-chave em negrito. Quaisquer letras entre e as tags ficam em negrito.

A string retornada deve usar o menor número possível de tags e, claro, as tags devem formar uma combinação válida.

Por exemplo, considerando que palavras = [“ab", “bc”] e S = “aabcd”, devemos retornar “a abc d”. Observe que retornar “a a bcd” usaria mais tags, então está incorreto.

Observação:

  • palavras tem comprimento no intervalo [0, 50].
  • words[i] tem comprimento no intervalo [1, 10].
  • S tem comprimento no intervalo [0, 500].
  • Todos os caracteres em words[i] e S são letras minúsculas.

Faça String Bold usando o algoritmo Bruteforce

Sem a exigência do mais curto, podemos colocar negrito em todas as ocorrências das palavras da lista. Como recebemos a string HTML original, podemos marcar em negrito para cada caractere que aparece nas palavras em negrito.

Portanto, com espaço O(N) e O(NM) onde N é o tamanho da string e M é o comprimento total da string em negrito, o algoritmo de força bruta C++ a seguir inserirá as tags HTML em negrito menos que satisfaçam o requisito.

class Solution {
public:
    string boldWords(vector<string>& words, string S) {
        int n = S.size();
        vector<bool> bold(n, false);
        for (const auto &s: words) {
            for (int i = 0; i + s.size() - 1 < n; ++ i) {
                bool ok = true;
                for (int k = 0; k < s.size(); ++ k) {
                    if (s[k] != S[i + k]) { // bold string s not found in the string
                        ok = false;
                        break;
                    }
                }
                if (ok) { // it is bold
                    for (int k = 0; k < s.size(); ++ k) {
                        bold[i + k] = true; // mark the character bold
                    }
                }
            }
        }
        string ans = "";
        for (int i = 0; i < n; ++ i) {
            // bold start boundary
            if (bold[i] && (i == 0 || !bold[i - 1])) ans += "<b>"; 
            ans += S[i];
            // bold end boundary
            if (bold[i] && (i == n - 1 || !bold[i + 1])) ans += "</b>";
        }
        return ans;
    }
};

Depois que os caracteres em negrito são marcados, redigitalizamos a string e procuramos os limites e inserimos as tags de acordo.

Fonte de gravação: helloacm.com

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação