首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过选择另一个数据结构进行代码优化

通过选择另一个数据结构进行代码优化
EN

Stack Overflow用户
提问于 2013-04-21 06:28:47
回答 1查看 89关注 0票数 0

我有一段代码需要优化。

代码语言:javascript
复制
 for (int i = 0; i < wordLength; i++) {
   for (int c = 0; c < alphabetLength; c++) {
     if (alphabet[c] != x.word.charAt(i)) {
        String res = WordList.Contains(x.word.substring(0,i) +
                     alphabet[c] +
                     x.word.substring(i+1));
      if (res != null && WordList.MarkAsUsedIfUnused(res)) {
        WordRec wr = new WordRec(res, x);
        if (IsGoal(res)) return wr;
        q.Put(wr);
      }
    }
  }

单词由字符串表示。问题是,第4-6行的代码创建了许多string对象,因为string是不可变的。

如果我想获得更快的代码,我应该将我的单词表示更改为哪种数据结构?我曾尝试将其更改为char[],但在获得以下代码工作时遇到了问题:

代码语言:javascript
复制
x.word.substring(0,i)

如何从char[]中获取子数组?如何在第4.6行连接char和char[]?

是否有其他合适且可变的数据结构可供我使用?我想过字符串缓冲区,但在字符串缓冲区上找不到合适的操作。

此函数在给定一个特定单词的情况下,生成相差一个字符的所有单词。WordRec只是一个类,它包含一个表示单词的字符串,以及一个指向该单词“父亲”的指针。

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2013-04-21 06:36:12

您可以使用以下方法减少对象的数量:

代码语言:javascript
复制
StringBuilder tmp = new StringBuilder(wordLength);
tmp.append(x.word);
for (int i=...) {
    for (int c=...) {
        if (...) {
           char old = tmp.charAt(i);
           tmp.setCharAt(i, alphabet[c]);
           String res = tmp.toString();
           tmp.setCharAt(i, old);
           ...
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16125841

复制
相关文章

相似问题

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