字符串与另一个字符串字符的比较

时间:2013-01-02 15:16:43

标签: javascript jquery algorithm

假设我有两个字符串a =“a-b-c”而另一个字符串是b =“a-b”。 我想检查字符串a是否包含字符串b的每个字母表。 有什么帮助吗?

4 个答案:

答案 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的每个字符。

我希望这会有所帮助。