假设我有两个字符串 a="abc",另一个是 b="ab"。我想检查字符串 a 是否包含字符串 b 的每个字母。
4 回答
一个有效的解决方案是将两个字符串读入两组字符。这样做之后,“a 中 b 中的每个字符”当且仅当b
是. 它可以优化为仅使用一组(对于 b) - 请参阅伪代码。a
这种方法的复杂性O(|a|+|b|)
平均是使用哈希表,或者O(log(min{|a|,|b|})*(|a|+|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
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");
您可以使用以下代码:
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.
}
我假设有几种方法和命令可能会同时表示两个字符串;也就是说,最直接的方法是检查字符串 b 中的每个字符是否确实包含在字符串 a 中。为此,您可以轻松调用indexOf(currentCharFromStringB)
String a。
我希望以下示例可以帮助您了解我的想法:
"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?
Now, it's up to you, dealing how you want to extract or represent each character of String B.
I hope this helps.