-5

假设我有两个字符串 a="abc",另一个是 b="ab"。我想检查字符串 a 是否包含字符串 b 的每个字母。

4

4 回答 4

1

一个有效的解决方案是将两个字符串读入两组字符。这样做之后,“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

于 2013-01-02T15:22:23.187 回答
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");
于 2013-01-02T15:23:42.280 回答
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.
}
于 2013-01-02T15:30:01.040 回答
0

我假设有几种方法和命令可能会同时表示两个字符串;也就是说,最直接的方法是检查字符串 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.

于 2013-01-02T15:30:42.533 回答