Strings são imutáveis devido a codificação dos caracteres (charset). A alteração arbitrária dos bytes de uma string quebraria essa codificação em charsets mais complexos como o UTF. Uma string no Python usa UTF8 por padrão.
Eu já tinha assistido dois vídeos ao longo dessa semana e tudo bem. Mas quando eu me vejo só olhando quem fez o vídeo e clicando, eu acho que já é o momento de se inscrever ksks.
Do nada decidiram falar apenas de buffer, na minha mensagem está "protocolo buffer" e não apenas "buffer" (o que pode ser encaixado até em matemática...), no caso da minha mensagem me refiro ao "Python protocol buffer" do "Python Data Models"
Acabei de bombar em um teste por causa disso... juro que precisei vir correndo pra ver isso porque apanhei feio... Valeu demais, Augusto! Vou estudar bastante sobre isso e outros conteúdos de leetcode seu, já me ajudaram muito! Edit: Acabei achando um mano na gringa que explica como fazer isso de uma forma um pouco mais complexa, que era exatamente o caso que bombei. Caso queiram estudar sobre, se apeguem ao que o Augusto ensinou e o que esse cara tem a ensinar: ruclips.net/video/u4BoxfwBsyU/видео.html
O problema diz que a memória alocada não pode depender do tamanho da string, então nesse caso ele poderia alocar até 1GB de espaço e não importaria, desde que isso fosse constante pra qualquer tamanho de string
A solução tem que ser O(1) em relação a entrada do programa. O que isso siginifica? Significa que deve utilizar o mesmo espaço em memória independente do tamanho da entrada. Ou seja, resolver o problema para uma "string" de 5 chars gas o mesmo espaço em memória de resolver o problema para uma string de 1M de chars. O(1) só significa que o espaço em memória usado para a solução independe do tamanho da entrada.
Vc aloca 2 variáveis, só que sempre são 2 variáveis independente se a "string" tem 10 caracteres ou 50000 caracteres... Por isso não tem problema, pq não depende do tamanho da string. Continua sendo O(1) e não O(n).
Acho q o problema é q eles tentam generalizar as questões para todas as linguagens. Geralmente uma string é um array de caracteres.
E eu pensando:
"Ué, mas é só passar a string como ponteiro, o final dela sempre será 0x00, independente do tamanho da string, dá para...AHH, PYTHON"
Strings são imutáveis devido a codificação dos caracteres (charset). A alteração arbitrária dos bytes de uma string quebraria essa codificação em charsets mais complexos como o UTF.
Uma string no Python usa UTF8 por padrão.
Seu canal é bom demais, bicho
Eu já tinha assistido dois vídeos ao longo dessa semana e tudo bem. Mas quando eu me vejo só olhando quem fez o vídeo e clicando, eu acho que já é o momento de se inscrever ksks.
kkkkk man esse cara é muito inteligente slc. estou estudando python e valeu pelos videos.
Maneirão o vídeo, gostaria de aprender a fazer esses truques sem destruir a memória do computador 😅
É possível fazer alteração ""in-place"" numa `str` em Python sem precisar alocar um novo espaço de memória, basta usar o protocolo "buffer"
Brother, o que vc acha que é um buffer?
Buffer é um espaço na memória...
Do nada decidiram falar apenas de buffer, na minha mensagem está "protocolo buffer" e não apenas "buffer" (o que pode ser encaixado até em matemática...), no caso da minha mensagem me refiro ao "Python protocol buffer" do "Python Data Models"
@@nium-xp Eu não sei python, porém buffer é um espaço na memória temporário, e pelo nome, da a entender que é um protocolo que usa buffers
Buffer é uma lista de bytes. Sting em python é imutável, o buffer cria uma cópia.
Tecnicamente uma string é um array de chars
Acabei de bombar em um teste por causa disso... juro que precisei vir correndo pra ver isso porque apanhei feio...
Valeu demais, Augusto! Vou estudar bastante sobre isso e outros conteúdos de leetcode seu, já me ajudaram muito!
Edit: Acabei achando um mano na gringa que explica como fazer isso de uma forma um pouco mais complexa, que era exatamente o caso que bombei. Caso queiram estudar sobre, se apeguem ao que o Augusto ensinou e o que esse cara tem a ensinar:
ruclips.net/video/u4BoxfwBsyU/видео.html
E se usasse print(s[::-1]) ? O que tem de errado?
Vc estaria gerando uma cópia da string e não alterando in place como o problema pede. Vc estaria alocando memória tão grande quanto N no final.
Não bastaria fazer [::-1] para inverter a string?
ele nao quer apenas inverter, envolve tbm alocacao de memoria
Se você inicializa e muta 2 variáveis você não está alocando espaço em memória? Digo, além do espaço da string/array.
eu tava pensando nisso também
mas isso é constante, para qualquer tamanho do array, a quantidade de memória usada é a mesma
O problema diz que a memória alocada não pode depender do tamanho da string, então nesse caso ele poderia alocar até 1GB de espaço e não importaria, desde que isso fosse constante pra qualquer tamanho de string
A solução tem que ser O(1) em relação a entrada do programa. O que isso siginifica? Significa que deve utilizar o mesmo espaço em memória independente do tamanho da entrada. Ou seja, resolver o problema para uma "string" de 5 chars gas o mesmo espaço em memória de resolver o problema para uma string de 1M de chars.
O(1) só significa que o espaço em memória usado para a solução independe do tamanho da entrada.
Vc aloca 2 variáveis, só que sempre são 2 variáveis independente se a "string" tem 10 caracteres ou 50000 caracteres... Por isso não tem problema, pq não depende do tamanho da string. Continua sendo O(1) e não O(n).
Voz gostosa da porra
kkkkkkkkkkkkkkk