dart - Dart -查找字符串中最常见的字符

标签 dart

我在使用Dart时遇到了这个常见的面试问题。我需要返回给定字符串中最常见的字符。我正在尝试创建一个包含每个字符计数的 map ,作为第一步。

到目前为止,这是我的进步:

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中返回String中最常见的字符?

谢谢!

编辑:

好的,我已经解决了,但是肯定有解决此问题的更简洁的方法。请参阅下面的解决方案:
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);
}

如果只想计算字符数,则可以删除所有提及maxCountmaxChar的行。

我用整数表示字符而不是字符串。这样既便宜又精确,它使您可以识别和组合Unicode UTF-16替代。

关于dart - Dart -查找字符串中最常见的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58892508/

相关文章:

flutter - 在Dart中关闭流后可以重新打开流吗

generics - 通用 Dart : '(BuildContext, String) => Padding'类型不是 '(BuildContext, dynamic) => Widget'类型的子类型

dart - 检查 Map 是否有重复值的最快方法?

firebase - 在 Dart/Flutter 中,如果 Firestore 数据库中没有 Collection,如何查看?

list - 类型 'List<Map<Object, Object>>'不是类型转换中的 'List<Map<String, Object>>'类型的子类型

firebase - 如何为提供者设置登录屏幕过渡的动画?

android - Webview 中的全屏视频在 Flutter 中不起作用

ubuntu - 如何安装适用于 Linux 的 Dart SDK 的 ZIP 版本?

javascript - Dart Canvas 不绘制图像

flutter - 如何在Flutter中对齐SliverGrid中的文本和图像?