Start learning free

LESSON 393 OF 415 · PROJECTS: COMMAND-LINE TOOLS

CLI Tool: uniq v4 — Loners Only in Swift

Practice

Build a version of the Unix uniq -u command. Given a list of lines, output only the values whose adjacent run length is exactly one — i.e. lines that did NOT repeat back-to-back. Surviving values are joined by \n.

Function signature:

func uniqOnce(_ lines: [String]) -> String

Example:

Input: lines = ["a", "a", "b", "c", "c", "c"]

Output: "b"

When printed:
b

The two "a"s and the three "c"s are dropped because their runs are longer than 1. Only the lone "b" survives.


Track prev and count. When the line changes (or after the loop), flush prev only if count == 1.

if count == 1 {
    result.append(prev!)
}
In Swift, == compares string values directly.

The full solution:
class Solution {
    func uniqOnce(_ lines: [String]) -> String {
        var result = [String]()
        var count = 0
        var prev: String? = nil
        for i in 0..<lines.count {
            if count > 0 && lines[i] == prev {
                count += 1
            } else {
                if count == 1 {
                    result.append(prev!)
                }
                prev = lines[i]
                count = 1
            }
        }
        if count == 1 {
            result.append(prev!)
        }
        return result.joined(separator: "\n")
    }
}

STEP 1 OF 13
    Ctrl + Enter to check

    Uniq V4 in Swift

    Keep going with SwiftAbout 340 step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free