**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
Improve this question
目前我正在尝试解决以下问题:
等值线图是没有连续或不连续的重复字母的单词。实现一个函数来确定一个只包含字母的字符串是否是等值线图。假设空字符串是等值线图。忽略字母大小写。
示例:(输入--〉输出)
“皮纹”--〉真“阿坝”--〉假“mooOse”--〉假(忽略字母大小写)isIsogram "Dermatoglyphics" = true isIsogram "moose" = false isIsogram "aba" = false
为了解决这个问题,我写了下面的代码。由于一个我看不到的原因,我的一个测试用例给了我一个true
输出,而我期待的是false
。我希望有人能看看我的代码,并指出正确的方向。感谢我所得到的任何知识!
public class isogram {
public static boolean isIsogram(String str) {
for (int i = 0; i < str.length(); i++){
for (int j = 0; j < str.length(); j++){
char c = str.charAt(i);
char d = str.charAt(j);
if((c == d) && (i != j)){
return false;
}
}
}
return true;
}
}
我尝试编写一个嵌套的for循环来导航单词。使用charAt从字符串中选择一个字母。在for循环下面使用if语句来比较字母。如果字母与要比较的字母相同,但位置不同,则返回false
。
2条答案
按热度按时间5ktev3wc1#
因为你应该忽略字母的大小写,所以在比较它们之前对两个字母都调用
Character.toLowerCase
,或者,先对整个String
调用toLowerCase
,例如str = str.toLowerCase()
。这也可以更简洁地写成流:
fivyi3re2#
正如Unmitigate建议的那样,需要将字符串转换为全部小写(或大写),这样大小写不同的字母仍然算作同一个字母,但是,如果不想使用流,可以使用HashSet跟踪已经见过的字母,从而使算法更高效。
一个HashSet允许你检查一个项目是否在固定时间内存在于集合中,就像一个HashMap。通过添加每个字母到集合中,然后检查下一个字母是否已经存在于集合中,你只需要循环字符串一次,而不是两个嵌套的for循环。示例如下: