确保两个字符串由不同顺序的相同字母组成

时间:2015-02-12 00:05:39

标签: java string

我必须创建一个Java程序,如果两个字符串由true"EMS"相同的字母组成,或者如果它不是"MES",则返回false情况下。

我尝试开发一些代码,我终于找到了一个解决方案,但它只适用于所有字母都不同的字母(没有字母重复)它不适用于"EEM""EMS"

String mot = "EMS", word="EES";
char[] tab= mot.toCharArray();
char[] vect= word.toCharArray();
int i = mot.length(), j = word.length(), a = 0;      
if (i != j)
    System.out.println("false");
else {
    for (int k=0; k<i; k++) {
        for (int l=0; l<i; l++) {
            if (tab[k] == vect[l])
                a++; 
        }
    }
    if (a == i)
         System.out.println("true");
    else
         System.out.println("false");
}

3 个答案:

答案 0 :(得分:0)

可能的想法是使用indexOf()在每个字符串中找到匹配的字符...

public static boolean sameChars(String str1, String str2){

    for(int i = 0; i < str1.length(); i++){
        if(str2.indexOf(str1.charAt(i)) == -1)
            return false;
    }
    for(int i = 0; i < str2.length(); i++){
        if(str1.indexOf(str2.charAt(i)) == -1)
            return false;
    }
    return true;

}

答案 1 :(得分:0)

怎么样

new HashSet<Character>(Arrays.asList("EMS".toCharArray())
  .equals(new HashSet<Character>(Arrays.asList("MES".toCharArray()));

答案 2 :(得分:0)

误报结果的原因是您要将E中的EMSEEES的{​​{1}}进行比较for }。你需要摆脱那个内在的{{1}}循环。在比较数组之前,您还需要对数组进行排序,作为评论者之一suggested

我不会提供代码来演示,因为它是基本级别的东西。如果这不是作业问题,那应该是。 :d