How to get all the substrings with exactly k distinct characters from a given string in Swift

1 Answer

0 votes
import Foundation

// Function to get all substrings with exactly k distinct characters
func getSubstringsWithKDistinct(_ s: String, _ k: Int) -> [String] { 
    var listOfSubstrings: [String] = []
    let n = s.count
    let characters = Array(s) // convert to array for indexing

    // Iterate over all possible starting points of substrings
    for i in 0..<n {
        var freqMap: [Character: Int] = [:] // dictionary for character frequencies
        var distinctCount = 0               // counter for distinct characters

        // Extend the substring from position i to j
        for j in i..<n {
            let ch = characters[j]

            // If character is new to the substring, increment distinct count
            if freqMap[ch] == nil {
                distinctCount += 1
                freqMap[ch] = 0
            }

            freqMap[ch]! += 1

            // If we have exactly k distinct characters, store the substring
            if distinctCount == k {
                let substring = String(characters[i...j])
                listOfSubstrings.append(substring)
            }
            // If we exceed k distinct characters, stop exploring this substring
            else if distinctCount > k {
                break
            }
        }
    }

    return listOfSubstrings
}

let str = "characters"
let k = 4

let substrings = getSubstringsWithKDistinct(str, k)

print("Number of substrings with exactly \(k) distinct characters = \(substrings.count)\n")

print("Substrings with exactly \(k) distinct characters in '\(str)':")
for sub in substrings {
    print(sub)
}



/*
run:

Number of substrings with exactly 4 distinct characters = 9

Substrings with exactly 4 distinct characters in 'characters':
char
chara
charac
harac
aract
ract
acte
cter
ters

*/

 



answered Nov 14, 2025 by avibootz

Related questions

...