我有以下代码,它将2个字符串作为输入,并返回布尔值,看它们是否是字谜:
import java.util.ArrayList;
import java.util.Scanner;
public class AnagramChecker {
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
System.out.print ("Enter string 1: ");
String str1 = sc.nextLine();
System.out.print ("Enter string 2: ");
String str2 = sc.nextLine();
boolean check = isAnagram (str1, str2);
System.out.println ("Anagram check for '" + str1 + "' and '" + str2 + "': " + check);
sc.close();
}
public static boolean isAnagram (String s1, String s2) {
if(s1.length() != s2.length())
return false;
s1 = s1.toLowerCase();
s2 = s2.toLowerCase();
ArrayList<String> myList = new ArrayList<String>();
for(int i = 0; i < s2.length() ; i++ ){
myList.add(String.valueOf(s2.charAt(i)));
}
for(int i = 0; i < s1.length();i++){
for(int j = 0; j < myList.size(); j++){
if(myList.get(j).equals(String.valueOf(s1.charAt(i)))){
myList.remove(j);
j = 0;
break;
}
}
}
return myList.isEmpty();
}
}
虽然有些限制,我正在尝试扩展它以适用于以下情况:
- 不同的案例,即eager == AGREE
- 带有空格的单个单词,即eager == a g ree
- 不同数量的空白,即" eager" == agree
有没有一种漂亮而干净的方法将其集成到上面已经编写的代码中,没有太多的痛苦和重写。任何帮助非常感谢。感谢。
答案 0 :(得分:3)
是的。正规救援!您可以使用.replaceAll()内置的String。传递\ s值将删除所有未打印的空格和字符,例如\ n。我建议在比较期间使用以下内容:
ceil(sqrt(input))
答案 1 :(得分:1)
我个人会做以下