判断字符串包含的问题
来源:互联网 发布:有趣的工作 知乎 编辑:程序博客网 时间:2024/06/13 08:29
有两个字符串str1和str2,假设str1比str2长,求str2中的所有字符是否被字符串str1包含,即str2是否是str1的真子集。
(1)用散列表进行实现
即把str1中的所有字符放入散列表中,然后依次判断str2中的每个字符是否在散列表中存在,其时间复杂度为O(n+m)。其实现的代码如下:
package com.threeTop.www;import java.util.Hashtable;/** * 用散列表进行实现 * @author wjgs * */public class StringContainUtils {/** * 散列表实现是否包含 * @param str1 * @param str2 * @return */public static boolean contain(String str1,String str2){ Hashtable<Character, Integer> hashtable=new Hashtable<Character, Integer>(); for(int i=0;i<str1.length();i++) { //依次把str1中的字符放入散列表,散列表中的值没用,这里设为1 hashtable.put(str1.charAt(i), 1); } for(int i=0;i<str2.length();i++) { if(hashtable.get(str2.charAt(i))==null) { return false; } }return true;}public static void main(String[] args) {// TODO Auto-generated method stub System.out.println(StringContainUtils.contain("ABCDEFG", "CDEF")); System.out.println(StringContainUtils.contain("ABCDEFG", "Cm"));}}
(2)用位运算进行实现:原理和散列表一样,其时间复杂度为O(n+m),空间复杂度为O(1).
/** * 使用位运算实现是否包含 * @param str1 * @param str2 * @return */public static boolean contain2(String str1,String str2){int result=0;//对str1进行或操作for(int i=0;i<str1.length();i++){result|=(1<<(str1.charAt(i)-'A'));}//对str2进行与操作for(int i=0;i<str2.length();i++){if((result&(1<<(str2.charAt(i)-'A')))==0){return false;}}return true;}
0 0
- 判断字符串包含的问题
- 判断字符串包含的问题
- PHP判断字符串的包含
- 字符串的包含问题
- 字符串的包含问题
- 字符串的包含问题
- 判断字符串是否包含另外的字符串
- 判断字符串是否包含指定的字符串
- oracle判断是否包含字符串的方法
- oracle判断是否包含字符串的方法
- 如何判断字符串包含的是数字
- oracle判断是否包含字符串的方法
- oracle判断是否包含字符串的方法
- 字符串移位包含的问题
- 字符串位移包含的问题
- 字符串移位包含的问题
- 字符串移位包含的问题
- 字符串移位包含的问题
- Java 可变长度参数
- Unity移动端性能优化
- 粗糙集分类
- 32位(x86)与64位(x64)程序中详细配置OpenGL环境小白教程
- java编程中注意点
- 判断字符串包含的问题
- springboot系列文章(一)-初识springboot
- 65-高级 I/O 函数与技术
- UNIX文件目录管理基本命令之移动光标屏幕翻滚插入文本
- The Debut Album (dp + 滚动数组)
- 深度学习在图像超分辨率重建中的应用
- 数据库笔记 6
- 门面模式(Facade 外观模式,对象结构型模式)
- iptables语法