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

字符串a中的java字母包含在字符串b中,java,string,char,contains,Java,String,Char,Contains,方法: public static boolean contains(String a, String b) { } 输入: System.out.println(contains("ABBA", "BARAB")); 输出: true 我正在努力的是如何正确地检查字符串a是否包含在字符串b中,如果有超过1个相同的字符 如果这是公共静态boolen包含(字符a,字符串b){} 这会容易10倍。如何计算b有2个或更多A和2个或更多b 输入: boolean c = contains("ABB

方法:

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

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

true

我正在努力的是如何正确地检查字符串a是否包含在字符串b中,如果有超过1个相同的字符

如果这是公共静态boolen包含(字符a,字符串b){} 这会容易10倍。如何计算b有2个或更多A和2个或更多b

输入:

boolean c = contains("ABBA","AKROBAT");
输出:

c = false

好了,我明白你的意思了,你可以这样做

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;
}
输出:

true
false
例2:

输出:

true
false

好了,我明白你的意思了,你可以这样做

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;
}
输出:

true
false
例2:

输出:

true
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;
}

效率不高,但易于操作。

您可以使用以下方法:

  • 注意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;
}

不是特别有效,但易于理解。

迭代
a
字符串,从
b
中删除第一个出现的字符串,并检查
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;
}
公共静态布尔包含(字符串a、字符串b){
字符串温度=b;
对于(int i=0;i
遍历
a
字符串,删除
b
中的第一个出现项,并检查
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;
}
公共静态布尔包含(字符串a、字符串b){
字符串温度=b;
对于(int i=0;i
也许你会数一数?你知道怎么做吗?“如果同一个字符不止一个。”你这是什么意思?请编辑您的问题,并添加一些关于此方法如何工作的示例。也许您可以计算它们?你知道怎么做吗?“如果同一个字符不止一个。”你这是什么意思?请编辑您的问题,并添加更多关于此方法如何工作的示例。在循环中,如果为false,则返回false-否则在循环后返回true。@JensKrogsboell注释不再重复valid@FlorentBayle对你说得对。我编辑了我的答案。谢谢你指点我。@FlorentBayle是的,我也是。在你的循环中,如果为false,则返回false,否则在循环后返回true。@JensKrogsboell评论不再重复valid@FlorentBayle对你说得对。我编辑了我的答案。谢谢你指点我。@FlorentBayle是的,我也是。