【发布时间】:2019-10-13 12:40:26
【问题描述】:
我尝试编写一个字符串 Anagram 程序,但在检查边界条件时卡住了。
我知道互联网上有很多与使用单循环或使用集合框架的字符串字谜相关的方法和程序,但我需要我的代码的解决方案,我如何才能涉及代码的边界情况。
public class StringAnagram {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "abc";
String strAnagram = "cba";
boolean areAnagrams = ifAnagrams(str, strAnagram);
System.out.println(areAnagrams);
}
private static boolean ifAnagrams(String str, String strAnagram) {
// TODO Auto-generated method stub
int count = 0;
char[] a = strAnagram.toCharArray();
if (str.length() != strAnagram.length()) {
return false;
}
for (int i = 0; i < str.length(); i++) {
{
System.out.println("str.charAt(i) in outer loop :" + str.charAt(i));
for (int j = 0; j < strAnagram.length(); j++) {
if (str.charAt(i) == strAnagram.charAt(j)) {
System.out.println("str.charAt(i) : " + str.charAt(i));
System.out.println("strAnagram.charAt(j) : " + strAnagram.charAt(j));
count++;
}
}
}
System.out.println(count);
if (count == str.length()) {
return true;
}
}
return false;
}
}
如果我输入喜欢的输入,代码工作正常 - “abc”或“abcd”,其中字符串中的每个字符只出现一次,但是当输入像“aab”可以与“abc”进行比较时它会失败,它会显示字符串是字谜。 那么,我如何在我的代码中处理这种情况。请指教。
【问题讨论】:
-
你可以使用排序。如果您的字母少于 20,我认为插入排序是可以的。
-
但是如果我写一个字谜检查器,我可能会声明 2 个数组,每个数组都包含另一个数组,其索引是要检查的字母,即
arr[letters['j']];,它只不过是一个计数器。在最后阶段,我会比较计数器是否匹配。程序的时间复杂度很可能是O(n) -
不使用数组,你可以使用
HashMap数据结构来完成。
标签: java data-structures