Dart 省道-查找字符串中最常用的字符
我被这个常见的面试问题困住了。我需要返回给定字符串中最常用的字符。我正在尝试创建一个地图,第一步是每个角色的计数 这是我目前的进展:Dart 省道-查找字符串中最常用的字符,dart,Dart,我被这个常见的面试问题困住了。我需要返回给定字符串中最常用的字符。我正在尝试创建一个地图,第一步是每个角色的计数 这是我目前的进展: main(List<String> arguments) { maxChar('hello'); } void maxChar(String word) { Map<String, int> charMap = {}; int max = 0; String maxChar = ''; word.split('').f
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);
}
我做错了什么?有没有更简单的方法可以在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;
}
main(列出参数){
打印(max_char.maxChar('hello'));
}
字符串maxChar(字符串字){
Map charMap={};
int max=-1;
字符串maxChar='';
word.split(“”).forEach((字符){
if(charMap.containsKey(char)){
charMap[char]++;
返回;
}否则{
charMap[char]=1;
}
});
charMap.forEach((k,v){
如果(v>最大值){
最大值=v;
maxChar=k;
}
});
返回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);
}
String charCount(字符串字符){
int maxChar=-1;
int maxCount=0;
变量计数={};
for(chars.runes中的var char){
int count=counts.update(字符,(n)=>n+1,如果存在:()=>1);
如果(计数>最大计数){
最大计数=计数;
maxChar=char;
}
}
返回字符串.fromCharCode(maxChar);
}
如果只想对字符进行计数,则可以删除提及maxCount
和maxChar
的所有行
我使用整数来表示字符,而不是字符串。这更便宜,也同样精确,并且允许您识别和组合Unicode UTF-16代理。一种更短的字符计数方法肯定是可行的:
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);
}
String charCount(字符串字符){
int maxChar=-1;
int maxCount=0;
变量计数={};
for(chars.runes中的var char){
int count=counts.update(字符,(n)=>n+1,如果存在:()=>1);
如果(计数>最大计数){
最大计数=计数;
maxChar=char;
}
}
返回字符串.fromCharCode(maxChar);
}
如果只想对字符进行计数,则可以删除提及maxCount
和maxChar
的所有行
我使用整数来表示字符,而不是字符串。这更便宜,也同样精确,并且允许您识别和组合Unicode UTF-16代理。您正在计算charMap[char]+1,但您没有对结果做任何处理(即,将其存储在地图中)。我怎么做?从未使用Dart,但我猜
charMap[char]=charMap[char]+1
或charMap[char]+=1
实际上charMap[char]+1是有效的,问题是我使用的是containsValue而不是containsKey。您还可以在第一个forEach循环中使用空感知运算符:charMap[char]??=0;charMap[char]++代码>您正在计算charMap[char]+1,但您没有对结果做任何操作(即将其存储在地图中)。我该怎么做?从未使用Dart,但我猜charMap[char]=charMap[char]+1
或charMap[char]+=1
实际上charMap[char]+1是有效的,问题是我使用的是containsValue而不是containsKey。您还可以在第一个forEach循环中使用空感知运算符:charMap[char]??=0;charMap[char]++代码>