Home » Count Unique Letters in String

Count Unique Letters in String

Extract the unique alphabets from the given strings and count their frequencies of occurrence. It should appear in the format alphabet:its count, next alphabet:its count….The result should be sorted on alphabets. Ex. cbacacbaa = a:4, b:2, c:3

📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 399
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Count Unique Letters in String with Power Query

Power Query solution 1 for Count Unique Letters in String, proposed by Luan Rodrigues:
let
  Fonte = Tabela1, 
  res = Table.AddColumn(
    Fonte, 
    "Personalizar", 
    each [
      a = Text.ToList([String]), 
      b = Text.Combine(
        List.Sort(
          List.Transform(
            List.Distinct(a), 
            each Text.Combine({_} & {Text.From(List.Count(List.Select(a, (x) => _ = x)))}, ":")
          ), 
          0
        ), 
        ", "
      )
    ][b]
  )
in
  res
Power Query solution 2 for Count Unique Letters in String, proposed by Ramiro Ayala Chávez:
let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Fx = (x) =>
    let
      a = Table.FromColumns({Text.ToList(x)}), 
      b = Table.Group(a, {"Column1"}, {{"G", each List.Count(_)}}), 
      c = Table.Sort(b, {{"Column1", 0}}), 
      d = Table.CombineColumns(
        Table.TransformColumnTypes(c, {{"G", type text}}), 
        {"Column1", "G"}, 
        Combiner.CombineTextByDelimiter(":"), 
        "M"
      ), 
      e = Text.Combine(d[M], ", ")
    in
      e, 
  Sol = Table.AddColumn(S, "Answer Expected", each Fx([String]))
in
  Sol
Power Query solution 3 for Count Unique Letters in String, proposed by Rafael González B.:
let
 Source = Excel.CurrentWorkbook(){0}[Content],
 Result = Table.AddColumn(Source, "Answer Expected", each 
 let
 t = [String],
 ttl = Text.ToList(t),
 Letters = List.Sort(List.Distinct(ttl)),
 LA = List.Accumulate(Letters,
 {},
 (s,c) => 
 let 
 a = List.Select(ttl, each _ = c),
 b = Text.From(List.Count(a)),
 d = s & {a{0} & ":" & b}
 in 
 d)
 in
 Text.Combine(LA, ", ")
 )[[Answer Expected]]
 
in
 Result

🧙‍♂️🧙‍♂️🧙‍♂️


                    
                  
          
Power Query solution 4 for Count Unique Letters in String, proposed by Luke Jarych:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Answer = Table.AddColumn(
    Source, 
    "Answer Expected", 
    each 
      let
        a = List.Distinct(List.Sort(Text.ToList([String]))), 
        b = Text.ToList([String]), 
        c = List.Transform(
          a, 
          (x) =>
            let
              c0 = Text.From(x), 
              c1 = Text.Combine({c0, Text.From(List.Count(List.Select(b, each _ = x)))}, ":")
            in
              c1
        ), 
        d = Text.Combine(c, ", ")
      in
        d
  )[[Answer Expected]]
in
  Answer
Power Query solution 5 for Count Unique Letters in String, proposed by Mihai Radu O:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  sol = Table.AddColumn(
    Source, 
    "r", 
    each 
      let
        a = Text.ToList([String]), 
        b = List.Sort(List.Distinct(a)), 
        c = List.TransformMany(
          b, 
          (x) => {List.Count(List.Select(a, each _ = x))}, 
          (x, y) => x & ":" & Number.ToText(y)
        ), 
        d = Text.Combine(c, ", ")
      in
        d
  )[[r]]
in
  sol
Power Query solution 6 for Count Unique Letters in String, proposed by Tyler N.:
let a = Table.AddColumn(Table.Group(Table.FromList(List.Sort(Text.ToList([String]))),"Column1",{{"c", each Text.From(Table.RowCount(_))}}),"s",each Text.Combine({[Column1],":",[c]})) in Text.Combine(a[s],", "))


                    
                  
          
Power Query solution 7 for Count Unique Letters in String, proposed by Karunakaran S K P:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  #"Changed Type" = Table.TransformColumnTypes(Source, {{"String", type text}}), 
  #"Added Custom" = Table.AddColumn(#"Changed Type", "Char List", each Text.ToList([String])), 
  #"Expanded Char List" = Table.ExpandListColumn(#"Added Custom", "Char List"), 
  #"Grouped Rows" = Table.Group(
    #"Expanded Char List", 
    {"String", "Char List"}, 
    {{"Char Count", each Table.RowCount(_), Int64.Type}}
  ), 
  #"Added Custom1" = Table.AddColumn(
    #"Grouped Rows", 
    "Custom", 
    each [Char List] & ":" & Text.From([Char Count])
  ), 
  #"Removed Columns" = Table.RemoveColumns(#"Added Custom1", {"Char List", "Char Count"}), 
  #"Grouped Rows1" = Table.Group(
    #"Removed Columns", 
    {"String"}, 
    {{"Expected Answer", each Text.Combine([Custom], ", "), type text}}
  )
in
  #"Grouped Rows1"

Solving the challenge of Count Unique Letters in String with Excel

Excel solution 1 for Count Unique Letters in String, proposed by Rick Rothstein:
=MAP(
    A2:A10,
    LAMBDA(
        a,
        LET(
            s,
            CHAR(
                SEQUENCE(
                    26
                )+96
            ),
            m,
            MID(
                a,
                LEN(
                    a
                ),
                1
            ),
            c,
            s&":"&LEN(
                    a
                )-LEN(
                SUBSTITUTE(
                    a,
                    s,
                    ""
                )
            ),
            TEXTJOIN(
                ", ",
                ,
                FILTER(
                    c,
                    RIGHT(
                        c
                    )<>"0"
                )
            )
        )
    )
)
Excel solution 2 for Count Unique Letters in String, proposed by محمد حلمي:
=MAP(
    A2:A10,
    LAMBDA(
        i,
        LET(
            d,
            MID(
                i,
                SEQUENCE(
                    LEN(
                        i
                    )
                ),
                1
            ),
            ARRAYTOTEXT(
                MAP(
                    SORT(
                        UNIQUE(
                            d
                        )
                    ),
                    LAMBDA(
                        a,
                        a&":"&SUM(
                            N(
                                d=a
                            )
                        )
                    )
                )
            )
        )
    )
)
Excel solution 3 for Count Unique Letters in String, proposed by محمد حلمي:
=MAP(
    A2:A10,
    LAMBDA(
        a,
        LET(
            d,
            SORT(
                MID(
                    a,
                    SEQUENCE(
                        LEN(
                            a
                        )
                    ),
                    1
                )
            ),
            u,
            UNIQUE(
                d
            ),
            ARRAYTOTEXT(
                u&":"&XMATCH(
                    u,
                    d,
                    ,
                    -1
                )-XMATCH(
                    u,
                    d
                )+1
            )
        )
    )
)
Excel solution 4 for Count Unique Letters in String, proposed by 🇰🇷 Taeyong Shin:
=MAP(
    A2:A10,
    LAMBDA(
        x,
        LET(
            u,
            UNIQUE(
                SORT(
                    MID(
                        x,
                        SEQUENCE(
                            LEN(
                                x
                            )
                        ),
                        1
                    )
                )
            ),
            ARRAYTOTEXT(
                u&":"&LEN(
                                x
                            )-LEN(
                    SUBSTITUTE(
                        x,
                        u,
                        
                    )
                )
            )
        )
    )
)
Excel solution 5 for Count Unique Letters in String, proposed by Kris Jaganah:
=MAP(A2:A10,
    LAMBDA(y,
    LET(a,
    MID(
        y,
        SEQUENCE(
            LEN(
                y
            )
        ),
        1
    ),
    b,
    SORT(
        UNIQUE(
            a
        )
    ),
    ARRAYTOTEXT(MAP(b,
    LAMBDA(x,
    x&":"&SUM(--(a=x))))))))
Excel solution 6 for Count Unique Letters in String, proposed by Julian Poeltl:
=MAP(
    A2:A10,
    LAMBDA(
        A,
        LET(
            Letters,
            MID(
                A,
                SEQUENCE(
                    1,
                    LEN(
                        A
                    )
                ),
                1
            ),
            UNIQ,
            SORT(
                UNIQUE(
                    Letters,
                    TRUE
                ),
                ,
                ,
                TRUE
            ),
            Count,
            LEN(
                        A
                    )-LEN(
                SUBSTITUTE(
                    A,
                    UNIQ,
                    ""
                )
            ),
            TEXTJOIN(
                ". ",
                ,
                UNIQ&":"&Count
            )
        )
    )
)
Excel solution 7 for Count Unique Letters in String, proposed by Timothée BLIOT:
=MAP(A2:A10,
    LAMBDA(z,
    LET(A,
    MID(
        z,
        SEQUENCE(
            LEN(
                z
            )
        ),
        1
    ),
    ARRAYTOTEXT(SORT(MAP(UNIQUE(
        A
    ),
    LAMBDA(x,
    x&":"&SUM(--(A=x)))))))))
Excel solution 8 for Count Unique Letters in String, proposed by Hussein SATOUR:
=MAP(
    A2:A10,
    LAMBDA(
        y,
        LET(
            a,
            MID(
                y,
                SEQUENCE(
                    LEN(
                        y
                    )
                ),
                1
            ),
            b,
            SORT(
                UNIQUE(
                    a
                )
            ),
            ARRAYTOTEXT(
                MAP(
                    b,
                    LAMBDA(
                        x,
                        x&":"&COUNTA(
                            FILTER(
                                a,
                                a=x
                            )
                        )
                    )
                )
            )
        )
    )
)
Excel solution 9 for Count Unique Letters in String, proposed by Oscar Mendez Roca Farell:
=MAP(
    A2:A10,
     LAMBDA(
         a,
          LET(
              _l,
               SORT(
                   MID(
                       a,
                        SEQUENCE(
                            LEN(
                                a
                            )
                        ),
                        1
                   )
               ),
              _f,
               FREQUENCY(
                   CODE(
                       _l
                   ),
                    96+SEQUENCE(
                        26
                    )
               ),
               ARRAYTOTEXT(
                   UNIQUE(
                       _l
                   )&":"&TOCOL(
                       IFS(
                           _f,
                           _f
                       ),
                        2
                   )
               )
          )
     )
)
Excel solution 10 for Count Unique Letters in String, proposed by Duy Tùng:
=MAP(
    A2:A10,
    LAMBDA(
        x,
        LET(
            a,
            MID(
                x,
                SEQUENCE(
                    LEN(
                        x
                    )
                ),
                1
            ),
            TEXTJOIN(
                {":",
                ", "},
                ,
                GROUPBY(
                    a,
                    a,
                    ROWS,
                    ,
                    0
                )
            )
        )
    )
)
Excel solution 11 for Count Unique Letters in String, proposed by Sunny Baggu:
=MAP(
 A2:A10,
 LAMBDA(x,
 LET(
 _m, MID(x, SEQUENCE(LEN(x)), 1),
 _um, SORT(UNIQUE(_m)),
 _cn, MAP(_um, LAMBDA(a, ROWS(FILTER(_m, _m = a)))),
 ARRAYTOTEXT(_um & ":" & _cn)
 )
 )
)
Excel solution 12 for Count Unique Letters in String, proposed by 🇵🇪 Ned Navarrete C.:
=u,
    LAMBDA(
        i,
        SUM(
            --i
        )
    ))))))
Excel solution 13 for Count Unique Letters in String, proposed by Thang Van:
=MAP(A2:A10,
    LAMBDA(_value,
    LET(a,
    _value,
    s,
    SEQUENCE(
        LEN(
            a
        ),
        ,
        1
    ),
    _mid,
    MID(
        a,
        s,
        1
    ),
    r,
    HSTACK(UNIQUE(
        _mid
    ),
    MAP(UNIQUE(
        _mid
    ),
    LAMBDA(_each,
    SUMPRODUCT(--(_each=_mid))))),
    
ARRAYTOTEXT(
    BYROW(
        r,
        LAMBDA(
            a,
            TEXTJOIN(
                ":",
                ,
                a
            )
        )
    )
)
)))
Excel solution 14 for Count Unique Letters in String, proposed by Charles Roldan:
=LET(
    a,
    CHAR(
        SEQUENCE(
            26,
            ,
            CODE(
                "a"
            )
        )
    ),
    
    MAP(
        A2:A10,
        LAMBDA(
            x,
            
            LET(
                n,
                LEN(
                    x
                )-LEN(
                    SUBSTITUTE(
                        x,
                        a,
                        
                    )
                ),
                
                ARRAYTOTEXT(
                    FILTER(
                        a&":"&n,
                        n
                    )
                )
            )
        )
    )
)
Excel solution 15 for Count Unique Letters in String, proposed by Andy Heybruch:
=MAP(
    A2:A10,
    
    LAMBDA(
        _string,
        
        LET(
            _a,
            _string,
            
            _letters,
  &          SORT(
                UNIQUE(
                    MID(
                        _a,
                        SEQUENCE(
                            LEN(
                                _a
                            )
                        ),
                        1
                    )
                ),
                1
            ),
            
            _ct,
            BYROW(
                _letters,
                LAMBDA(
                    v,
                    LEN(
                                _a
                            )-LEN(
                        SUBSTITUTE(
                            _a,
                            v,
                            ""
                        )
                    )
                )
            ),
            
            TEXTJOIN(
                ", ",
                1,
                _letters&":"&_ct
            )
        )
    )
)
Excel solution 16 for Count Unique Letters in String, proposed by Gerson Pineda:
=MAP(A2:A10,
    LAMBDA(x,
    LET(m,
    SORT(
        MID(
            x,
            SEQUENCE(
                LEN(
                    x
                )
            ),
            1
        )
    ),
    ARRAYTOTEXT(MAP(UNIQUE(
        m
    ),
    LAMBDA(i,
    i&":"&COUNT(1/(i=m))))))))
Excel solution 17 for Count Unique Letters in String, proposed by Victor Momoh (MVP, MOS, R.Eng):
=MAP(A2:A10,LAMBDA(x,LET(a,MID(x,SEQUENCE(LEN(x)),1),TEXTJOIN({":",", "},1,GROUPBY(a,a,COUNTA,0,0)))))
Excel solution 18 for Count Unique Letters in String, proposed by Nicolas Micot:
=LET(_lettres;
    STXT(
        A2;
        SEQUENCE(
            NBCAR(
                A2
            )
        );
        1
    );
    
_lettres_unique;
    TRIER(
        UNIQUE(
            _lettres
        )
    );
    
_cpt;
    MAP(_lettres_unique;
    LAMBDA(l_car;
    SOMME(--(_lettres=l_car))));
    
JOINDRE.TEXTE(
    ", ";
    ;
    _lettres_unique&":"&_cpt
))
Excel solution 19 for Count Unique Letters in String, proposed by Sandeep Marwal:
=MAP(
    A2:A10,
    LAMBDA(
        I,
        LET(
            
            a,
            SORT(
                MID(
                    I,
                    SEQUENCE(
                        LEN(
                            I
                        )
                    ),
                    1
                ),
                ,
                1
            ),
            
            b,
            UNIQUE(
                a
            ),
            
            c,
            MAP(
                b,
                LAMBDA(
                    x,
                    COUNTA(
                        FILTER(
                            a,
                            a=x
                        )
                    )
                )
            ),
            
            d,
            b&":"&c,
            
            TEXTJOIN(
                ", ",
                ,
                d
            )
        )
    )
)
Excel solution 20 for Count Unique Letters in String, proposed by Ernesto Vega Castillo:
=BYROW(
    A2:A10,
    LAMBDA(
        data,
        LET(
            str,
            CHAR(
                SEQUENCE(
                    26,
                    ,
                    97
                )
            ),
            ext,
            MID(
                data,
                SEQUENCE(
                    LEN(
                        data
                    ),
                    ,
                    1
                ),
                1
            ),
            newData,
            str&":"&LEN(
                        data
                    )-LEN(
                SUBSTITUTE(
                    data,
                    str,
                    ""
                )
            ),
            TEXTJOIN(
                ", ",
                ,
                FILTER(
                    newData,
                    RIGHT(
                        newData
                    )>"0"
                )
            )
        )
    )
)
Excel solution 21 for Count Unique Letters in String, proposed by Gabriel Pugliese:
=DROP(
    REDUCE(
        0;
        $A$2:$A$10;
        LAMBDA(
            t;
            c;
            VSTACK(
                t;
                LET(
                    a;
                     MID(
                         c;
                         SEQUENCE(
                             LEN(
                                 c
                             )
                         );
                         1
                     );
                    LET(
                        sol;
                        MAP(
                            SORT(
                                UNIQUE(
                                    a
                                )
                            );
                            LAMBDA(
                                x;
                                COUNTA(
                                    FILTER(
                                        a;
                                        a=x
                                    )
                                )
                            )
                        );
                        TEXTJOIN(
                            ",";
                            ;
                            SORT(
                                UNIQUE(
                                    a
                                )
                            )&": "&sol
                        )
                    )
                )
            )
        )
    );
    1
)
Excel solution 22 for Count Unique Letters in String, proposed by Fábio Gatti:
=LAMBDA(Text,
    Delimiter1,
    Delimiter2,
    
 LET(
 _Letters,
    MID(
        Text,
        SEQUENCE(
            LEN(
                Text
            )
        ),
        1
    ),
    
 _Arr,
    SORT(
        UNIQUE(
            _Letters
        )
    ),
    
 _Count,
    BYROW(_Arr,
    LAMBDA(x,
    SUM(--(x=_Letters)))),
    
 _Concat,
    MAP(
        _Arr,
        _Count,
        LAMBDA(
            a,
            b,
            a&Delimiter1&b
        )
    ),
    
 _Result,
    TEXTJOIN(
        Delimiter2,
        1,
        _Concat
    ),
    
 _Result
 )
)(A2,
    ":",
    ", ")
Excel solution 23 for Count Unique Letters in String, proposed by Surendra Reddy:
=MAP(
    A2:A10,
    LAMBDA(
        each_string,
        LET(
            string_split,
            MID(
                each_string,
                SEQUENCE(
                    LEN(
                        each_string
                    )
                ),
                1
            ),
            count_summary,
            GROUPBY(
                string_split,
                string_split,
                COUNTA,
                ,
                0,
                
            ),
            TEXTJOIN(
                {":",
                ","},
                ,
                count_summary
            )
        )
    )
)

Solving the challenge of Count Unique Letters in String with Python

Python solution 1 for Count Unique Letters in String, proposed by Luke Jarych:
Python solutions - pandas + xlwings:
import pandas as pd
import xlwings as xw
wb = xw.Book(r'Excel_Challenge_399 - Counter Dictionary.xlsx')
sh = wb.sheets[0]
table = sh.tables['Table1']
rng = sh.range(table.range.address)
df = rng.options(pd.DataFrame, header = True, index=False, numbers=int).value
results_list =[]
for _, row in df.iterrows():
 a = sorted(list(row['String']))
 b = list(row['String'])
 
 counts = {}
 for char in a:
 count = sum(1 for item in b if char in item)
 counts[char] = count
 
 counts_str = ', '.join([f'{char}:{count}' for char, count in counts.items()])
 results_list.append(counts_str)
 
result_df = pd.DataFrame({'Expected Answer': results_list})
                    
                  
Python solution 2 for Count Unique Letters in String, proposed by Giorgi Goderdzishvili:
from collections import Counter
lst = pd.read_clipboard().String.to_list()
for i in lst:
 dc = Counter(i)
 sorted_dict = dict(sorted(dc.items(), key=lambda item: item[0]))
 print(sorted_dict)
                    
                  

Solving the challenge of Count Unique Letters in String with R

R solution 1 for Count Unique Letters in String, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
input = read_excel("Excel/399 Counter Dictionary.xlsx", range = "A1:A10")
test = read_excel("Excel/399 Counter Dictionary.xlsx", range = "B1:B10")
count_chars = function(string) {
 chars = string %>%
 str_split(., pattern = "") %>%
 unlist() %>%
 tibble(char = .) %>% 
 group_by(char) %>%
 summarise(count = n()) %>%
 ungroup() %>%
 arrange(char) %>%
 unite("char_count", c("char", "count"), sep = ":") %>%
 pull(char_count) %>%
 str_c(collapse = ", ")
 
 return(chars)
}
result = input %>%
 mutate(`Answer Expected` = map_chr(String, count_chars)) %>%
 select(-String)
                    
                  

&&

Leave a Reply