簡體   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