Sobes.tech
Intern

/* Տրված է նիշերի տող: գտնել i և j ցուցանիշների զույգերի քանակը (i <= j), որոնց միջև կրկնվող նիշեր չկան: "aba" տողը պատասխանն է 5: կարող են լինել ASCII [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */

sobes.tech AI

Պատասխան AI-ից

Խնդրի լուծման համար անհրաժեշտ է անցնել տեքստի բոլոր ենթատեքստերը և ստուգել, որ յուրաքանչյուր ենթատեքստում կրկնվող նշաններ չկան: Դա արդյունավետ կերպով անել կարելի է օգտագործելով երկու ցուցիչով շարժվող պատուհան և միավոր, որը հետևում է եզակի նշաններին:

Օրինակ Go-ում:

func countUniqueSubstrings(s string) int {
    n := len(s)
    count := 0
    chars := make(map[byte]bool)
    j := 0

    for i := 0; i < n; i++ {
        for j < n && !chars[s[j]] {
            chars[s[j]] = true
            j++
        }
        count += j - i
        delete(chars, s[i])
    }
    return count
}

// Օգտագործման օրինակ:
// s := "aba"
// fmt.Println(countUniqueSubstrings(s)) // Տպում է 5

Իդեա՝ մենք ընդլայնում ենք աջ ցուցիչը j, քանի դեռ նշանները եզակի են, ապա շարժում ենք ձախ ցուցիչը i և հեռացնում նշանները հավաքածուից: Ենթատեքստերի քանակը, որոնք սկսվում են i-ից, հավասար է j - i-ին։