我有2个字符串“test”“bet”和另一个字符串a =“tbtetse”。我需要检查“tbtetse”是否包含其他两个字符串。
我在想是否能找到字符串a的所有字符串,然后在那些字符串中找到另外两个字符串,但它不会那样工作,而且我的字谜代码也失败了一个冗长的字符串。
你能帮忙解决任何其他方法吗?
答案 0 :(得分:2)
假设您正在尝试测试a
中的字母是否可用于形成测试字符串test
和bet
的字谜:我建议制作字典(HashMap或来自字符串a
的字符计数,由字符索引。为您正在测试的单词构建类似的字典。然后确保a
至少包含测试字符串中每个字符的实例数。
编辑:Alcanzar建议长度为26的数组用于保存计数(每个字母一个插槽)。假设你只处理英文字母,那可能不像字典那么麻烦。如果您不知道允许的字符数,则需要字典路由。
答案 1 :(得分:0)
伪代码:
复制字符串“tbtetse”。
循环浏览“test”中的每个字符。
执行indexOf()搜索复制字符串中的字符,如果找到则将其删除。
如果找不到,则失败。
对字符串“bet”执行相同的操作。
答案 2 :(得分:0)
基本上你需要对两组中的字符进行计数并比较它们
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()(或修正计数方法)。
答案 3 :(得分:0)
检查以下代码,它可能对您有帮助。
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;
}
}
答案 4 :(得分:0)
class WordLetter {
char letter;
int nth; // Occurrence of that letter
...
}
现在可以使用套装
Set<WordLetter>
// "test" = { t0 e0 s0 t1 }
然后测试减少到设置操作。如果两个单词都需要存在,则可以测试联合。如果两个单词必须由单独的字母组成,则可以测试一组连接。