大众点评题:判断字符串是否包含子串的全部字符
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;
以上是关于大众点评题:判断字符串是否包含子串的全部字符的主要内容,如果未能解决你的问题,请参考以下文章
算法进阶面试题01——KMP算法详解输出含两次原子串的最短串判断T1是否包含T2子树Manacher算法详解使字符串成为最短回文串