java查找字符串是否包含2个其他字符串

时间:2014-05-09 19:48:10

标签: java

我有2个字符串“test”“bet”和另一个字符串a =“tbtetse”。我需要检查“tbtetse”是否包含其他两个字符串。

我在想是否能找到字符串a的所有字符串,然后在那些字符串中找到另外两个字符串,但它不会那样工作,而且我的字谜代码也失败了一个冗长的字符串。

你能帮忙解决任何其他方法吗?

5 个答案:

答案 0 :(得分:2)

假设您正在尝试测试a中的字母是否可用于形成测试字符串testbet的字谜:我建议制作字典(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 }

然后测试减少到设置操作。如果两个单词都需要存在,则可以测试联合。如果两个单词必须由单独的字母组成,则可以测试一组连接。