如何检查给定的字符串是否可以从Java中的另一个字符串形成?

时间:2017-11-20 16:58:16

标签: java string

我需要检查一下给定的字符串是否可以用Java中的主字符串形成。

示例:

输入

主弦 - lhLoe

您好

鳗鱼

EL,$ H

输出继电器:

你好:是的

鳗鱼:没有

EL,$ H。 :是的

我可以尝试排列,但如果第一个字符串很长,则需要很长时间。还有其他办法吗?

注意:我们可以忽略特殊字符。

3 个答案:

答案 0 :(得分:1)

首先,将两个字符串小写,以便:

lowerCasedMainString = "hello"
lowerCasedTargetString = "el,$h"

接下来删除特殊字符,因为您说它们可以被忽略:

lowerCasedTargetStringStripped = "elh"

有多种方法可以解决问题的其余部分,但我会做这样的循环(伪代码):

while(length of target > 0) {
    char c = target.charAt(1);

    if(main contains c) {
       main = main with that instance of c removed
    } else {
       return false
    }

    target = target.substring(1);
}
return true;

每个单独的步骤都应该很容易实现。如果您正在解决这样的问题,您可能已经看到了将要执行此操作的方法。否则,Stack Overflow上将存在现有答案。

答案 1 :(得分:0)

您可以使用正则表达式并将String定义为字符组。

这样的事情:

    String search="lhLoe";
    String input="HELLO";
    input=input.replaceAll("^[a-zA-Z1-9]","");
    Pattern p = Pattern.compile("^["+search+"]+$",Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(input);
    boolean b = m.matches();

答案 2 :(得分:0)

您可以将给定主字符串中每个字符的出现次数存储在数组中。 (我们称之为数组a。)

对给定的测试字符串重复相同的过程。 (我们称之为数组b)

如果测试字符串(数组b)中每个字符的出现次数小于主字符串(数组a)中相应字符的出现次数,则可以使用主字符串形成测试字符串。

运行时复杂性将是线性的。

注意区分大小写和特殊符号。