如何检查给定的字符串是否可以由给定的一组字符串组成?在给定的字符串集中,任何字符串都可以使用任意次,只有这些字符串不能被拆分。”
For e.g.,
given set of strings are:
<aaa, hh, aa, rr>
Strings to check:
rraaahh :: returns True
raahh :: returns False
aarrr :: returns True
下面,我编写了一个函数,该函数从一组字符串中选择任意两个字符串,并检查给定的字符串是否可以由所选字符串组成。
但是我如何处理一次要使用两个以上字符串的情况,而任何一个字符串都可以多次使用。
static boolean isPossible(Vector<String> v, String str)
{
// Sort the given string
str = sortString(str);
// Select two strings at a time from given vector
for (int i = 0; i < v.size() - 1; i++)
{
for (int j = i + 1; j < v.size(); j++)
{
// Get the concatenated string
String temp = v.get(i) + v.get(j);
// Sort the resultant string
temp = sortString(temp);
// If the resultant string is equal
// to the given string str
if (temp.compareTo(str) == 0)
{
return true;
}
}
}
// No valid pair found
return false;
}
答案 0 :(得分:0)
简单检查字符串输入是否包含列表中的子字符串。如果剩下任何字母,则不会由那些子字符串组成,并返回false。尝试如下代码。
public static void main(String[] args) {
String input = "aarr";
ArrayList<String> list = new ArrayList<String>() {{
add("aaa");
add("hh");
add("aa");
add("rr");
}};
System.out.println(isPossible(list, input));
}
static boolean isPossible(ArrayList<String> list, String input) {
int count = 4;
for (String item : list) {
if (input.contains(item)) {
input = input.replace(item, "");
System.out.println("Debug: " + input);
}
}
if ((int) input.length() == 0) {
System.out.println("Pass: " + input.length());
return true;
} else {
System.out.println("Fail: " + input.length());
}
return false;
}
答案 1 :(得分:0)
简单替换不起作用,因为“ aaaa”始终始终与“ aaa”匹配,仅剩下“ a”。但是您可以递归地解决它。
public static void main(String[] args) {
String input = "aaaarrrraahhaaa";
ArrayList<String> list = new ArrayList<String>() {
{
add("aaa");
add("hh");
add("aa");
add("rr");
}
};
System.out.println(isPossible(list, input));
}
static boolean isPossible(List<String> fragments, String input) {
return isOkay(fragments, input, "");
}
private static boolean isOkay(List<String> list, String input, String candidate) {
for (int i = 0; i < list.size(); i++) {
String testee = candidate + list.get(i);
if (testee.equals(input)) {
return true;
}
if (input.startsWith(testee)) {
boolean tempResult = isOkay(list, input, testee);
if (tempResult) {
return true;
}
}
testee = candidate;
}
return false;
}