Diberikan dua string, string induk dan string kueri masing-masing, tugas Anda adalah menentukan berapa kali string kueri, atau anagram string kueri ; muncul di string induk, dalam pencarian case-sensitive.
Contoh Perilaku
Input 1
AdnBndAndBdaBn
dAn
Output 1
4
Penjelasan Substring disorot dalam huruf tebal di bawah ini:
Adn BndAndBdaBn
AdnB ndA ndBdaBn
AdnBn dAn dBdaBn
AdnBnd Dan BdaBn
Perhatikan bahwa pencarian HARUS peka terhadap semua pencarian.
Input 2
AbrAcadAbRa
cAda
Keluaran 2
2
Ini harus bekerja hanya untuk ASCII standar. Ini adalah kode-golf, sehingga jumlah karakter terpendek akan mendapat tanda centang persetujuan. Silakan juga memposting versi non-golf kode Anda bersama dengan versi golf.
code-golf
string
permutations
WallyWest
sumber
sumber
abacacaba
aac
Jawaban:
Pyth,
1110 byte1 byte golf berkat @Jakube.
Demonstrasi.
Mengambil string kueri, diikuti oleh string induk pada baris baru.
Tidak Disatukan:
sumber
CJam, 13 byte
(12 byte, jika tumpang tindih diizinkan)
Masukan seperti:
yaitu
Terima kasih kepada Dennis karena telah menyimpan 3 byte dalam skenario yang tumpang tindih
Cobalah online di sini
sumber
ll1$,ew:$\$e=
l$_,lew:$\e=
Tetapi tidak yakin apakah ini akan valid sekarang karena OP telah mengatakan bahwa tumpang tindih tidak diperbolehkan. Biarkan saya melihat apakah saya dapat mengurangi yang sekarang.JavaScript ES6, 95 byte
Ini adalah fungsi yang membutuhkan dua argumen seperti ini:
f(parent,query)
.Itu melewati semua substring dari string induk dari panjang string kueri dan mengurutkannya. Jika mereka sama dengan string kueri yang diurutkan, maka akan bertambah
n
. Mengurutkan string menjengkelkan karena harus dikonversi ke array, diurutkan, dan dikonversi kembali ke string. Kode tidak diuji dan diuji di bawah ini.sumber
Haskell,
7768 bytePemakaian:
Cara kerjanya: string induk adalah
p
, string kueris
.tails
membuat daftar parameternya dengan menghapus elemen pertama, misalnyatails "abcd" -> ["abcd","bcd","cd","d",""]
. Untuk setiap elemenx
daftar ini, ambil1
jikan
elemen yang diurutkan pertama (di manan
panjangnyas
) sama dengan yang diurutkans
. Jumlahkan1
s.Sunting:
tails
alih-alih rekursi eksplisitsumber
Python, 61 byte
Ini adalah algoritma rekursif. Ia memeriksa apakah karakter awal dari string induk, setelah diurutkan, sama dengan string kueri, diurutkan. Kemudian, itu rekursif pada string induk dengan karakter pertamanya dihapus. Ini berakhir ketika string induk kosong.
sumber
Python 2,
7670 byteFungsi lambda ini secara iteratif membandingkan setiap substring yang diurutkan dengan substring target. Pertandingan dihitung dan dikembalikan.
Kode yang tidak dipisahkan:
dan hasil tes:
sumber
Python 2,
124118 byteCoba di sini
Ini adalah fungsi lambda anonim. Mungkin masih bisa bermain golf lebih lanjut.
Tidak Disatukan:
sumber
f('aaa','aa')
.import re,itertools as i
menghemat 6 karakter. (Saya belum tahu sebelumnya bahwa itu bekerja.)