首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除具有两个同意性字母的给定字符串中的一个字母。

删除具有两个同意性字母的给定字符串中的一个字母。
EN

Stack Overflow用户
提问于 2020-07-31 14:05:50
回答 3查看 65关注 0票数 0

我正在尝试在Dart/Flutter中建立一个简单的算法来检查一个给定的字符串,如果它有两个连续的字母,它就会删除其中的一个。

输入:你好,福尔,契诺,脚部输出: helo,for,del,fot

这就是我到目前为止所做的:

代码语言:javascript
运行
复制
dropDoubleLetters(String str) {
  List<String> strArray = new List();
  strArray = str.split('');
  String finalizedStr = "";
  for (var counter = 0; counter >= strArray.length; counter++) {
    finalizedStr += strArray[counter];
    if (strArray[counter] == strArray[counter + 1]) {
      strArray.removeAt(counter + 1);
      finalizedStr += strArray[counter];
    }
  }
  print('word is :' + finalizedStr);
}

问题是该方法的输出始终为null,它总是以这种格式返回:

颤振:单词是:

如何解决这个算法,我在这里做错了什么??

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-31 14:17:45

首先,counter >= strArray.length是错误的,因为指数在范围内(0,strArray.length - 1).接下来,finalizedStr变量是无用的,因为您正在修改原始的strArray。因此,strArray本身就是答案。

代码语言:javascript
运行
复制
dropDoubleLetters(String str) {
  List<String> strArray = new List();
  strArray = str.split('');
  for (var counter = 0; counter < strArray.length - 1; counter++) {
    if (strArray[counter] == strArray[counter + 1]) {
      strArray.removeAt(counter + 1);
    }
  }
  print('word is :' + strArray.join(''));
}

另一种方法是用前一个字符检查每个字符:

代码语言:javascript
运行
复制
dropDoubleLetters(String str) {
  List<String> strArray = new List();
  strArray = str.split('');
  String finalizedStr = strArray[0];
  for (var counter = 1; counter < strArray.length; counter++) {
    if (strArray[counter] != strArray[counter - 1]) {
      finalizedStr += strArray[counter];
    }
  }
  print('word is :' + finalizedStr);
}

注意:在第一种方法中,每个字符都与下一个one(strArray[counter + 1]),进行比较,因此计数器最多应该是strArray.length - 2__。

票数 2
EN

Stack Overflow用户

发布于 2020-07-31 14:29:15

我知道没人要这个,所以别把答案记下来。但是,如果有人认为“这可以通过使用正则表达式来解决”,那么下面就是这个想法的答案:

代码语言:javascript
运行
复制
void main() {
  final wordList = ['hello', 'foor', 'deed', 'foot'];
  print(wordList.map(dropDoubleLettersRegExp).toList()); // [helo, for, ded, fot]
}

String dropDoubleLettersRegExp(String str) =>
    str.replaceAllMapped(RegExp(r'(\w)\1+'), (match) => match.group(1));
票数 2
EN

Stack Overflow用户

发布于 2020-07-31 14:14:34

您正在对>= strArray.length进行迭代,从0开始,这意味着您的循环最终将执行strArraystrArray.length,这将引发一个异常,因为您要脱离绑定,请记住,您的最后一个元素是at (strArray.length-1 ),尝试在">“中更改">=”,您应该会没事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63193385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档