假设我有两个字符串a =“a-b-c”而另一个字符串是b =“a-b”。 我想检查字符串a是否包含字符串b的每个字母表。 有什么帮助吗?
答案 0 :(得分:1)
一个有效的解决方案是将两个字符串读成两个sets 字符。执行此操作后,“只有当b
a
O(|a|+|b|)
O(log(min{|a|,|b|})*(|a|+|b|))
时才会出现”b中的所有字符“。它可以优化为仅使用一组(对于b) - 参见伪代码。
此方法的复杂性平均使用哈希表为O(|a|*|b|)
,或使用基于树的setB <- empty set
for each element e in b:
setB.add(e)
for each element e in a:
setB.remove(e) //assuming doing nothing if doesn't exist
return setB.isEmpty()
最差情况。如果你搜索每个角色,那么与一个天真的解决方案相比要好得多b
。
伪码:
a
优化的想法是将a
的元素(字符集)加载到集合中,然后迭代b
,同时从集合中删除元素(如果遇到)。
一旦你完成迭代a
,如果(且仅当)false
中有一个不在{{1}}中的字符 - 它将保留在集合和算法中将返回{{1}}
答案 1 :(得分:0)
function func(a,b) {
var alphabet = b.split("-");
for (var i=0; i < alphabet.length; i++) {
if (a.indexOf(alphabet[i]) == -1)
return false;
}
return true;
}
func("a-b-c", "a-b");
答案 2 :(得分:0)
您可以使用以下代码:
var b = "a-b";
var a = "a-b-c";
var firstArray = b.split("-");
var secArray = a.split("-");
var length = firstArray.lenght;
for(var i =0; i<length; i++)
{
if(secArray.indexOf(firstArray[i]) != -1)
continue; //or do something
else
break; // or return false.
}
答案 3 :(得分:0)
我假设有几种方法和命令可能会让两个字符串代表;也就是说,最直接的方法是检查String b中的每个char是否确实包含在String a中。为此,您可以轻松地在String a上调用indexOf(currentCharFromStringB)
。
我希望以下示例可以帮助您了解我的想法:
"Blue Whale".indexOf("Blue") != -1; // true
"Blue Whale".indexOf("Bloe") != -1; // false
一些伪代码将是:
for each char in b
for each char in a
is a in b?
现在,由您来决定如何提取或表示字符串B的每个字符。
我希望这会有所帮助。