Masalahnya mengatakan untuk membuat string, ambil 3 karakter tidak berurutan dari string dan masukkan ke dalam sub-string dan cetak karakter mana yang pertama dan karakter mana yang terakhir.

str="subliminal"
sub="bmn"

n = len(str)-3

for i in range(0, n):
    print(str1[i:i+4])
    if sub1 in str1:
        print(sub1[i])

Ini harus mencetak 3 hingga 8 karena b adalah huruf ketiga dan n adalah huruf ke-8.

Saya juga tidak tahu bagaimana membuat kode berfungsi untuk substring yang panjangnya tidak 3 karakter tanpa mengubah kode secara total.

0
oh my god 9 Januari 2021, 22:32

3 jawaban

Jawaban Terbaik

Tidak yakin apakah ini yang Anda maksud. Saya berasumsi bahwa substring sudah valid, yang berarti mengandung huruf yang tidak berurutan. Kemudian saya mendapatkan huruf pertama dan terakhir dari substring dan membuat daftar semua huruf dalam string menggunakan pemahaman daftar. Kemudian saya hanya mengulang huruf dan menyimpan di mana huruf pertama dan terakhir muncul. Kalau ada yang kurang, hmm.

sub = "bmn"
str = "subliminal"

first_letter = sub[0]
last_letter = sub[-1]

start = None
end = None

letters = [let for let in str]

for i, letter in enumerate(letters):
    if letter == first_letter:
        start = i
    if letter == last_letter:
        end = i

if start and end:
    print(f"From %s to %s." % (start + 1, end + 1)) # Output: From 3 to 8.
1
Honn 9 Januari 2021, 19:51

Beberapa rekursi untuk kesehatan yang baik:

def minimum_window_substring(strn, sub, beg=0, fin=0, firstFound=False):

    if len(sub) == 0 or len(strn) == 0:
        return f'From {beg + 1} to {fin}'
    elif strn[0] == sub[0]:

        return minimum_window_substring(strn[1:], sub[1:], beg, fin + 1, True)

    if not firstFound:
        beg += 1
    return minimum_window_substring(strn[1:], sub, beg, fin + 1, firstFound)

Penjelasan:

Kasus dasarnya adalah jika kita mendapatkan string asli atau sub-string kita menjadi panjang 0, kita kemudian berhenti dan mencetak awal dan akhir substring dalam string asli.

Jika huruf pertama dari string saat ini sama maka kita mulai penghitung (kita perbaiki awal "memohon" dengan flag "firstFound") Kemudian naikkan hingga kita selesai (sub adalah string kosong / string asli kosong)

Sesuatu untuk dipikirkan / Penjelasan lebih lanjut:

Jika misalnya, Anda meminta kemunculan substring pertama, misalnya jika string aslinya adalah "sububusubulum" dan sub akan sama dengan "sbl" kemudian ketika kita menekan "s" pertama kita - itu berarti akan 100% mulai dari sana, karena jika "sbl" lain ada di dalam string asli - maka itu harus berisi huruf yang tersisa, dan seterusnya kita akan mengatakan mereka milik s pertama. (Penjelasan yang mengerikan, saya minta maaf) apa yang saya coba katakan adalah bahwa jika kita memiliki 2 kemunculan substring - maka kita akan memilih yang pertama, apa pun yang terjadi.

Catatan: Fungsi ini tidak terlalu peduli jika string sub berisi huruf berurutan, juga tidak memeriksa apakah karakter ada di dalam string itu sendiri, karena Anda mengatakan bahwa kita harus karakter yang diberikan dari string asli. Hal positifnya, adalah bahwa fungsi tersebut dapat diberikan lebih dari (atau kurang dari) substring panjang 3 karakter

Ketika saya mengatakan "string asli", maksud saya subliminal (atau input lainnya)

1
user12686317 9 Januari 2021, 20:46

Ada banyak cara berbeda yang bisa Anda lakukan,

Inilah jiwa,

import re 
def Func(String, SubString):
    patt = "".join([char + "[A-Za-z]" + "+" for char in sub[:-1]] + [sub[-1]])
    MatchedString = re.findall(patt, String)[0]
    FirstIndex = String.find(MatchedString) + 1
    LastIndex = FirstIndex + len(MatchedString) -1 
    return FirstIndex, LastIndex
string="subliminal"
sub="bmn"
FirstIndex, LastIndex = Func(string, sub)

Ini akan mengembalikan 3, 8 dan Anda dapat mengubah panjang substring, dan dengan asumsi Anda hanya menginginkan pertandingan pertama saja

0
Mahmoud Salhab 10 Januari 2021, 13:28