大众点评题:判断字符串是否包含子串的全部字符

Posted 纵横千里,捭阖四方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大众点评题:判断字符串是否包含子串的全部字符相关的知识,希望对你有一定的参考价值。

题目的基本要求是:判断字符串A中的字符串是否全部出现在字符串B中,据说是大众点评出的题。

这个题怎么做呢?貌似很简单, 可以用一个Hash,将B中的全部字符依次放入,然后再逐步读取子串的字符并判断是否存在Hash中即可。坏处是需要一个O(n)的空间。

还可以直接比较,每读一个B中的字符就扫描一遍字符串,看看是否存在,这种方式的好处是简单易懂,坏处自然是查找效率比较低。

还有一种方式是现将字符串排序,然后再比较,坏处仍然是效率不高,因为要先进行大量排序操作,而且还改变了 原始字符串。

比较起来还是第二种方式更为简单直接一些,因为针对字符串我们可以直接使用indexOf()方法,要编写的代码量会大幅度减少。

public static boolean check(String s1,String s2)
char []s2_arr=s2.toCharArray();
for(int i=0;i<s1.length();i++)
 char a=s1.charAt(i);
 if(s2.indexOf(a)==-1)
    return false;
   
 
return true;

如果要提升查找的效率该怎么做呢?我们可以先对s2进行排序,然后查找的时候直接使用Arrays的二分查找来进行,也就是这样:

public static boolean check(String s1,String s2)
char []s2_arr=s2.toCharArray();
Arrays.sort(s2_arr);
for(int i=0;i<s1.length();i++)
 char a=s1.charAt(i);
 int index=Arrays.binarySearch(s2_arr,a);
 if(index<0)
   return false;
  
return true;

以上是关于大众点评题:判断字符串是否包含子串的全部字符的主要内容,如果未能解决你的问题,请参考以下文章

js里面判断一个字符串是否包含某个子串的方法

ES6——字符串

[面试题]找出字符串在集合中的子串数量(字符串)

[面试题]找出字符串在集合中的子串数量(字符串)

算法进阶面试题01——KMP算法详解输出含两次原子串的最短串判断T1是否包含T2子树Manacher算法详解使字符串成为最短回文串

子串判断