我需要检查一下给定的字符串是否可以用Java中的主字符串形成。
示例:
输入
主弦 - lhLoe
您好
鳗鱼
EL,$ H
输出继电器:
你好:是的
鳗鱼:没有EL,$ H。 :是的
我可以尝试排列,但如果第一个字符串很长,则需要很长时间。还有其他办法吗?
注意:我们可以忽略特殊字符。
答案 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)中相应字符的出现次数,则可以使用主字符串形成测试字符串。
运行时复杂性将是线性的。
注意区分大小写和特殊符号。