Encontrar strings que contêm uma determinada substring
Oct 22 2020
Usando os seguintes comandos (que podem ser ineficientes), posso gerar todas as palavras de comprimento $j$ no alfabeto $\{0,1\}$:
sd[st_]:=StringDelete[st, " "]
name[j_]:=Map[sd,Map[StringRiffle,Tuples[{0, 1}, j] ]]
Suponha que eu queira encontrar todas as palavras de comprimento 6 que contenham como substring 101, como faço isso? Eu tentei usar, StringCasesmas isso parece me dar apenas strings que começam ou terminam com 101. Existe uma maneira de fazer isso?
Respostas
4 kglr Oct 22 2020 at 19:10
Dois métodos adicionais (ambos mais rápidos do que Select[strings, StringContainsQ["101"]]):
strings = Map[StringJoin, Tuples[{"0", "1"}, 6]];
Pick[strings, StringContainsQ["101"] @ strings]
{"000101", "001010", "001011", "001101", "010100", "010101", "010110", "010111", "011010", "011011", "011101", "100101", "101000", "101001", "101010", "101011", "101100", "101101", "101110", "101111", "110100", "110101", "110110", "110111", "111010", "111011", "111101"}
Uma alternativa mais lenta:
Pick[strings, StringMatchQ["*101*"]@strings]
mesmo resultado
3 SjoerdSmit Oct 22 2020 at 17:53
Dois métodos diferentes:
strings = Map[StringJoin, Tuples[{"0", "1"}, 6]];
Flatten @ StringCases[
strings,
StartOfString ~~ ___ ~~ "101" ~~ ___ ~~ EndOfString
]
Select[strings, StringContainsQ["101"]]
A Selectvariante é um pouco mais rápida para grandes conjuntos de dados.
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?