gpt4 book ai didi

java - 字符串索引超出范围 : -1 error with loops

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:44:47 34 4
gpt4 key购买 nike

我检查了有关此问题的旧主题,但无法解决。

此方法用于比较两个字符串,如果第一个字符串的每个字母/字符都在第二个字符串中找到(不一定反之亦然),则该方法应返回“true”(即使第二个字符串有额外的字母)。

我的想法是检查第一个字符串的每个索引处的字母,看看它是否在第二个字符串中,如果是,则删除两个字符串中的那个字母。当第一个字符串用完所有字母(长度为零)时, boolean 值应返回 true。

我认为我的循环或子字符串在某些时候超出了范围。

public boolean isFound(String first, String second) {
StringBuilder sb1 = new StringBuilder(first);
StringBuilder sb2 = new StringBuilder(second);

first.toCharArray();
second.toCharArray();
for (int i = 0; i < first.length(); i++) {
int k = (first.substring(i, i + 1)).indexOf(second, i);
if (sb1.length() > 0) {
sb1.deleteCharAt(k);
sb2.deleteCharAt(k);
}
}
if (sb1.length() == 0) {
return true;
} else {
return false;
}
}

例如:“at”和“tack”应该返回 true,“tree”和“ere”应该返回 false。

编辑查看评论后,我的新代码现在是这样的。它总是返回 false,即使是“tree”和“tree”。

   public boolean isFound(String first, String second){
StringBuilder sb2 = new StringBuilder(second);

for(int i=0;i<first.length();i++){
int k = sb2.indexOf(first,i);
if (k==-1)
return false;
else sb2.deleteCharAt(k);
}
return true;
}

最佳答案

你的代码中有很多问题。

  • 你只需要一个 StringBuilder 版本,second
  • toCharArray() 的调用是多余的
  • 您不应在 second 中搜索 first 的每个字符,而应在它的可变版本 sb2 中搜索。
  • 您使用的 indexOf 有误。应在 StringBuilder 对象上调用此方法以搜索第一个参数,您已将其交换。

你可以使用的伪代码是

isSuperAnagram(String first, String second) {
sb = StringBuilder(second)
for all chars in first {
k = search index of current char of first in sb
if(k == -1) // char is not in sb
return false
else
remove char at index k from sb
}
return true
}

关于java - 字符串索引超出范围 : -1 error with loops,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29294306/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com