1.程序要求
比较输入的两个字符串是否为字母异位词,也就是两个字符串包含字母相同,只是顺序不同。
2.思路
- 获取字符串输入
- 字符串转为list集合,便于移除和索引
- 循环匹配每个字母,若有相同字母则移除,若有字母未匹配到则退出循环
- 判断两个list是否都为空,是则结果为true,否则为false
3.java程序
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class AnagramCheck {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = "abcd";
String str2 = "sdac";
Scanner scanner = new Scanner(System.in);
System.out.println("Enter two string and I'll tell you if they are anagrams: ");
System.out.print("Enter the first string: ");
do{
if (scanner.hasNextLine()){
str1 = scanner.nextLine();
break;
}
}while(true);
System.out.print("Enter the second string: ");
do{
if (scanner.hasNextLine()){
str2 = scanner.nextLine();
break;
}
}while(true);
scanner.close();
boolean b = isAnagram(str1,str2);
if (b){
System.out.print("\"" + str1 + "\" and \"" + str2 + "\" are anagrams.");
}else
System.out.print("\"" + str1 + "\" and \"" + str2 + "\" aren't anagrams.");
}
private static boolean isAnagram(String str1, String str2) {
// TODO Auto-generated method stub
boolean result = false;
if (str1.length() != str2.length()){
return result;
}
List<Character> list1 = new ArrayList<Character>();
List<Character> list2 = new ArrayList<Character>();
char[] str1Char = str1.toCharArray();
char[] str2Char = str2.toCharArray();
for (int i = 0;i < str1Char.length;i++){
list1.add(str1Char[i]);
}
for (int i = 0;i < str2Char.length;i++){
list2.add(str2Char[i]);
}
for (int i = 0;i < list2.size();i++){
if (list2.contains(list1.get(i))){
list2.remove(list1.get(i));
list1.remove(i);
//System.out.println(list1);
//System.out.println(list2);
//如果进入if则说明包含同一个字符,删除之后i要重置为0
i--;
}else
break;
}
if (list2.isEmpty() && list1.isEmpty()){
result = true;
}
return result;
}
}