繁体   English   中英

字符串a中的java字母包含在字符串b中

[英]java letters in string a contains in string b

方法:

public static boolean contains(String a, String b) { }

输入:

System.out.println(contains("ABBA", "BARAB"));

输出:

true

我正在努力的是,如果同一字符超过1个,如何正确检查String a是否包含在String b中。

如果这是公共静态布尔值contains(char a,String b){},那么它会容易10倍。 我如何继续计算b有2个或更多的A和2个或更多的B?

输入:

boolean c = contains("ABBA","AKROBAT");

输出:

c = false

您可以使用这种方法:

  • 请注意a和b之间的长度差异
  • 对于...中的每个字母
    • 将两个字符串中所有出现的字母替换为空白
    • 如果长度差异发生变化,则返回false
  • 循环后,返回true

在代码中:

public static boolean contains(String a, String b) {
    int diff = a.length() - b.length();
    while (a.length() > 0) {
        b = b.replace(a.substring(0, 1), "");
        a = a.replace(a.substring(0, 1), "");
        if (diff != a.length() - b.length())
            return false;
    }
    return true;
}

效率不高,但易于遵循。

好吧,现在我明白了,你可以这样

public static boolean contains(String a, String b) {
    boolean status = true;
    Map<String,Integer> mapA=new HashMap<>();
    Map<String,Integer> mapB=new HashMap<>();
    for(char i:a.toCharArray()){
        Integer val=mapA.get(""+i);
        if(val!=null){
            mapA.put(""+i,val+1);
        } else {
            mapA.put(""+i,1);
        }
    }
    for(char i:b.toCharArray()){
        Integer val=mapB.get(""+i);
        if(val!=null){
            mapB.put(""+i,val+1);
        } else {
            mapB.put(""+i,1);
        }
    }

    for(Map.Entry<String,Integer> entry:mapA.entrySet()){
        if (mapB.get(entry.getKey()) == null || entry.getValue() > 
                                                 mapB.get(entry.getKey())) {
            status = false;
        }
    }
    return status;
}

现在它将检查字母和相同的出现次数。

例如1:

System.out.println(contains("ABBA", "BARAB"));

输出:

true

例如2:

System.out.println(contains("ABBA","AKROBAT"));

输出:

false

遍历a字符串,从b删除 a匹配项,并检查b大小是否更改为1,如果是,则继续,如果否,则返回false:

public static boolean contains(String a, String b) {
    String temp = b;
    for (int i = 0; i < a.length(); i++) {
        temp = temp.replaceFirst(Pattern.quote(a.substring(i, i + 1)), "");
        if (b.length() - temp.length() != i + 1) return false;
    }
    return true;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM