dart - Dart - 查找字符串中最常见的字符
问题描述
我被困在这个使用 Dart 的常见面试问题上。我需要返回给定字符串中最常见的字符。作为第一步,我正在尝试创建一个包含每个字符计数的地图。
这是我到目前为止的进展:
main(List<String> arguments) {
maxChar('hello');
}
void maxChar(String word) {
Map<String, int> charMap = {};
int max = 0;
String maxChar = '';
word.split('').forEach((char) {
if(charMap.containsValue(char)) {
charMap[char]+1;
return;
} else {
charMap[char] = 1;
}
});
print(charMap);
}
现在它甚至没有计算字母“l”的正确数量。它正在输出:
{h: 1, e: 1, l: 1, o: 1}
我究竟做错了什么?有没有更简单的方法来返回 Dart 中字符串中最常见的字符?
谢谢!
编辑:
好的,我已经解决了,但肯定有更简洁的方法来解决这个问题。请参阅下面的解决方案:
main(List<String> arguments) {
print(max_char.maxChar('hello'));
}
String maxChar(String word) {
Map<String, int> charMap = {};
int max = -1;
String maxChar = '';
word.split('').forEach((char) {
if(charMap.containsKey(char)) {
charMap[char]++;
return;
} else {
charMap[char] = 1;
}
});
charMap.forEach((k,v) {
if(v > max) {
max = v;
maxChar = k;
}
});
return maxChar;
}
解决方案
绝对可以使用更短的方法来计算字符:
String charCount(String chars) {
int maxChar = -1;
int maxCount = 0;
var counts = <int, int>{};
for (var char in chars.runes) {
int count = counts.update(char, (n) => n + 1, ifAbsent: () => 1);
if (count > maxCount) {
maxCount = count;
maxChar = char;
}
}
return String.fromCharCode(maxChar);
}
如果你只想计算字符,你可以删除所有提到maxCount
和的行maxChar
。
我使用整数来表示字符而不是字符串。这更便宜且同样精确,它允许您识别和组合 Unicode UTF-16 代理项。
推荐阅读
- java - 尝试使用 ScenBuilder 在 JavaFX 中切换场景时为什么会出现此错误?
- openshift - Openshift:ImageStream 独立于存储库映像更改
- ios - VNDocumentCameraViewController 和 AVCaptureStillImageOutput 的图像差异?
- go - 如何在现有表中插入列
- javascript - 如何从函数返回实际的 dom 元素
- python - Python的打印函数不按顺序显示值
- node.js - 得到非错误:[错误 [MongoError]:拓扑被破坏
- apache - 如何使其他设备通过 LAN 访问 WAMP
- xcode - 多个项目解决方案 (.sln) 文件以创建单个设置 (.msi) 文件
- c# - 本地 Azure DevOps Server 2019:备份保留构建的工件