[英]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
您可以使用這種方法:
在代碼中:
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.