我正在尝试做一些基于句子中字符数量的动态规划。英语字母表中哪个字母在屏幕上占像素最多?


当前回答

大写的“M”通常是最宽的。

其他回答

大写的“M”通常是最宽的。

Arial 30px在Chrome - W获胜。

这也取决于字体。我在1或2年前用Processing和Helvetica做过这个,它是ILJTYFVCPAXUZKHSEDORGNBQMW,按增加像素的顺序。这个想法是用你正在看的字体在画布上绘制文本,计算像素,然后用HashMap或Dictionary排序。

当然,这可能与您的使用没有直接关系,因为它计算像素面积而不仅仅是宽度。可能也有点过头了。

void setup() { 
 size(30,30);
 HashMap hm = new HashMap();
 fill(255);
 PFont font = loadFont("Helvetica-20.vlw");
 textFont(font,20);
 textAlign(CENTER);

 for (int i=65; i<91; i++) {
    background(0);
    text(char(i),width/2,height-(textDescent()+textAscent())/2); 
    loadPixels();
    int white=0;
    for (int k=0; k<pixels.length; k++) {
       white+=red(pixels[k]);
    }
    hm.put(char(i),white);
  }

  HashMap sorted = getSortedMap(hm);

  String asciiString = new String();

  for (Iterator<Map.Entry> i = sorted.entrySet().iterator(); i.hasNext();) { 
    Map.Entry me = (Map.Entry)i.next();
    asciiString += me.getKey();
  }

  println(asciiString); //the string in ascending pixel order

}

public HashMap getSortedMap(HashMap hmap) {
  HashMap map = new LinkedHashMap();
  List mapKeys = new ArrayList(hmap.keySet());
  List mapValues = new ArrayList(hmap.values());

  TreeSet sortedSet = new TreeSet(mapValues);
  Object[] sortedArray = sortedSet.toArray();
  int size = sortedArray.length;

  // a) Ascending sort

  for (int i=0; i<size; i++) {
    map.put(mapKeys.get(mapValues.indexOf(sortedArray[i])), sortedArray[i]);
  }
  return map;
}

我认为字母W是最宽的。

这取决于字体。例如,交叉0所占的空间要比普通0大得多。

但如果要猜的话,我会选X或B。