pub fn score(string: &str) -> usize {
    string
        .chars()
        .map(|c| match c {
            'A' | 'E' | 'I' | 'O' | 'U' | 'L' | 'N' | 'R' | 'S' | 'T' => 1,
            'a' | 'e' | 'i' | 'o' | 'u' | 'l' | 'n' | 'r' | 's' | 't' => 1,
            'D' | 'G' => 2,
            'd' | 'g' => 2,
            'B' | 'C' | 'M' | 'P' => 3,
            'b' | 'c' | 'm' | 'p' => 3,
            'F' | 'H' | 'V' | 'W' | 'Y' => 4,
            'f' | 'h' | 'v' | 'w' | 'y' => 4,
            'K' => 5,
            'k' => 5,
            'J' | 'X' => 8,
            'j' | 'x' => 8,
            'Q' | 'Z' => 10,
            'q' | 'z' => 10,
            _ => 0,
        })
        .sum()
}

#![feature(ascii_ctype)]
use std::ascii::AsciiExt;

const SCORETABLE: [usize; 26] = [
//  a,  b,  c,  d,  e,  f,  g,  h,  i,  j,  k,  l,  m
    1,  3,  3,  2,  1,  4,  2,  4,  1,  8,  5,  1,  3,
//  n,  o,  p,  q,  r,  s,  t,  u,  v,  w,  x,  y,  z
    1,  1,  3, 10,  1,  1,  1,  1,  4,  4,  8,  4, 10,
];

pub fn score(string: &str) -> usize {
    string
        .chars()
        .map(|c| match c {
            _ if c.is_ascii_uppercase() => SCORETABLE[c as usize - 'A' as usize],
            _ if c.is_ascii_lowercase() => SCORETABLE[c as usize - 'a' as usize],
            _ => 0,
        })
        .sum()
}

Use lookup table to simplify code
Use lookup table to simplify code

And also it is effeicent now
