我有2個字符串「test」「bet」和另一個字符串a =「tbtetse」。我需要檢查「tbtetse」是否包含其他兩個字符串。java查找字符串是否包含2個其他字符串
我在想如果我能找到所有的字符串a和anagrams,然後在其中找到其他兩個字符串,但它不會這樣工作,而且我的anagram代碼也無法處理冗長的字符串。
請問您可以通過其他方式來解決問題嗎?
我有2個字符串「test」「bet」和另一個字符串a =「tbtetse」。我需要檢查「tbtetse」是否包含其他兩個字符串。java查找字符串是否包含2個其他字符串
我在想如果我能找到所有的字符串a和anagrams,然後在其中找到其他兩個字符串,但它不會這樣工作,而且我的anagram代碼也無法處理冗長的字符串。
請問您可以通過其他方式來解決問題嗎?
查看下面的代碼,它可能會幫助你。
public class StringTest {
public static void main(String[] args) {
String str1 = "test";
String str2 = "bev";
String str3 = "tbtetse";
System.out.println(isStringPresent(str1, str2, str3));
}
private static boolean isStringPresent(String str1, String str2, String str3) {
if ((str1.length() + str2.length()) != str3.length()) {
return false;
} else {
String[] str1Arr = str1.split("");
String[] str2Arr = str2.split("");
for (String string : str1Arr) {
if (!str3.contains(string)) {
return false;
}
}
for (String string : str2Arr) {
if (!str3.contains(string)) {
return false;
}
}
}
return true;
}
}
對於String [] str1Arr = str1.split(「」) - 你是否試圖將str1放入一個字符串數組中,其中每個索引都有一個字符?我們可以將它保存在字符數組中嗎?只是想明白。 –
是的。你可以嘗試,但如果我將它保存爲'String'數組,然後我得到預定義的字符串方法進行比較,就像我使用'contains()' – Vishrant
我試着用字符數組,但是我不能使用str3。包含查找該字符串中的字符。我需要在那裏找到在str3中找到什麼?我是否需要在字符數組中更改str3?是否有任何數組函數可用於測試它是否包含該字符? –
假設你想測試中a
字母是否可用於形成測試串test
和bet
的字謎:我建議做字符的字典(HashMap的或其他)從字符串a
計數,通過索引字符。爲你正在測試的單詞建立一個類似的詞典。然後確保a
至少有來自測試字符串的每個字符的實例。
編輯:Alcanzar建議長度爲26的數組保持計數(每個字母一個槽)。假設你只處理英文字母,這可能比詞典更麻煩。如果您不知道允許的字符數,字典路由是必需的。
基本上你需要計算兩個字符集,並比較他們
void fillInCharCounts(String word,int[] counts) {
for (int i = 0; i<word.length(); i++) {
char ch = word.charAt(i);
int index = ch - 'a';
counts[index]++;
}
}
int[] counts1 = new int[26];
int[] counts2 = new int[26];
fillInCharCounts("test",counts1);
fillInCharCounts("bet",counts1);
fillInCharCounts("tbtese",counts2);
boolean failed = false;
for (int i = 0; i<counts1.length; i++) {
if (counts1[i] > counts2[i]) {
failed = true;
}
}
if (failed) {
whatever
} else {
something else
}
如果您正在推廣它,不要忘了在發送之前對詞叫.toLowerCase()(或修復計數法)。
class WordLetter {
char letter;
int nth; // Occurrence of that letter
...
}
一個現在可以使用集
Set<WordLetter>
// "test" = { t0 e0 s0 t1 }
然後測試減少設置操作。如果兩個單詞都需要存在,那麼可以測試一個工會。如果兩個單詞必須由單獨的字母組成,則可以測試一組串聯。
你問是否可以在字母提供或出現的順序找到單詞? – Alcanzar
是詢問字母「tbestse」是否包含單詞「test」和「bet」所需的字母 –