字符串包含的判断

给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短。请问,如何最快地判断字符串B中所有字母是否都在字符串A里?简单起见,约定只出现小写字符。

代码:

package alg;

import java.util.Arrays;

/**
 * @author zha
 * 字符串包含
 */
public class Alg2StringContain {

    public static void main(String[] args) {
        String tt = "abcdefg";
        String t = "cfh";
        System.out.println(StringContain(tt, t));
        System.out.println(isContain(tt,t));
        System.out.println(isContainByHashCode(tt,t));

        /**
         * 如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,
         * 比如bad和adb即为兄弟字符串,现提供一个字符串,如何在字典中迅速找到它的兄弟字符串,请描述数据结构和查询过程。
         * */
        //结合上面的思想,在字典中有一类的数据叫做字母相同但是顺序不同的词,可以先排序然后在进行比较确认,考虑到了重复字符的问题
        //记录hashtable的办法也是可以的,不过需要记录每个字符出现的次数,比较同一个字符出现的次数来判断是否是兄弟字符串

    }

    /**
     * 如果我们使用hashtable把出现的字符保存起来,然后遍历短的字符串就能够确定每一个字符是否包含
     * 更近一步,我们可以使用bit为来标记字符的出现
     * */
    private static boolean isContainByHashCode(String tt, String t) {
        int hash = 0;
        for (int i = 0; i < tt.length(); ++i)
        {
            hash |= (1 << (tt.toCharArray()[i] - ‘A‘));
        }
        for (int i = 0; i < t.length(); ++i)
        {
            if ((hash & (1 << (t.toCharArray()[i] - ‘A‘))) == 0)
            {
                return false;
            }
        }
        return true;
    }

    //排序比较
    private static boolean isContain(String tt, String t) {
        char[] ttchar = tt.toCharArray();
        Arrays.sort(ttchar);
        char[] tchar = t.toCharArray();
        Arrays.sort(tchar);
        for (int pa = 0, pb = 0; pb < tchar.length;)
        {
            while ((pa < ttchar.length) && (ttchar[pa] < tchar[pb]))
            {
                ++pa;
            }
            if ((pa >= ttchar.length) || (ttchar[pa] > ttchar[pb]))
            {
                return false;
            }
            //相等的条件下
            ++pb;
        }
        return true;
    }

    //暴力比较
    private static boolean StringContain(String tt,String t)
    {
        for (int i = 0; i < t.length(); ++i) {
            int j;
            for (j = 0; (j < tt.length()) && (tt.charAt(j) != t.charAt(i)); ++j)
                ;
            if (j >= tt.length())
            {
                return false;
            }
        }
        return true;
    }
}

欢迎指出代码中不足的地方。

时间: 2024-10-18 17:29:49

字符串包含的判断的相关文章

PHP 字符串包含判断

遇到了这个问题.记录一下.用strpos查找字符串来进行字符串包含判断. 1 <?php 2 //$res = strpos("hello", "hx"); 3 $res = strpos("hello", "he"); 4 if ($res !== false){ 5 echo "find OK, pos:$res\n"; 6 } 7 else { 8 echo "find failed,

【前端】javascript判断undefined、null、NaN;字符串包含等

JS中判断null.undefined与NaN的方法 这篇文章主要介绍了JS中判断null.undefined与NaN的方法,需要的朋友可以参考下 . . 写了个 str ="s"++; 然后出现Nan,找了一会. 收集资料如下判断: 1.判断undefined: 复制代码 代码如下: <span style="font-size: small;">var tmp = undefined; if (typeof(tmp) == "undefin

一般是HTTP_ACCEPT这个服务器变量中如果包含如下几个字符串,就可以判断是手机

知乎用户,IT行业从业者 崔Vincent.知乎用户 赞同 现在手机浏览器的标准也不一样,各有各的浏览器,一般是HTTP_ACCEPT这个服务器变量中如果包含如下几个字符串,就可以判断是手机 text/vnd.wap.wml application/vnd.wap.xhtml+xml 有个特殊例子就是那个手机上的opera,它在发送HTTP_ACCEPT时,不会发送它支持text/vnd.wap.wml文档,但它会发送支持xhtml文档,mime类型为:application/xhtml+xml

shell 字符串包含

转自:Shell判断字符串包含关系的几种方法 现在每次分析网站日志的时候都需要判断百度蜘蛛是不是真实的蜘蛛,nslookup之后需要判断结果中是否包含"baidu"字符串 以下给出一些shell中判断字符串包含的方法,来源程序员问答网站 stackoverflow 以及segmentfault. 方法一:利用grep查找 1 strA="long string" 2 strB="string" 3 result=$(echo $strA | gr

字符串包含

字符串包含 题目:假设这有一个各种字母组成的字符串A,和另外一个字符串B,字符串里B的字母数相对少一些.什么方法能最快的查出所有小字符串B 里的字母在大字符串A里都有? <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<&l

【程序员编程艺术】学习记录3:字符串包含问题

[程序员编程艺术]学习记录3:字符串包含问题 题目: 假设这有一个各种字母组成的字符串A,和另外一个字符串B,字符串里B的字母数相对少一些.什么方法能最快的查出所有小字符串B 里的字母在大字符串A里都有? <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

程序员编程技术学习笔记——字符串包含

程序员编程技术学习笔记--字符串包含 1.题目描述 给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短.请问,如何最快地判断字符串B中所有字母是否都在字符串A里?为了简单起见,我们规定输入的字符串只包含大写英文字母,请实现函数boolStringContains(string &A, string &B) 比如,如果是下面两个字符串: String 1:ABCD String 2:BAD 答案是true,即String2里的字母在String1里也都有,或者说Strin

shell if判断(曾经被一个字符串相等的判断纠结半小时,最后只是if后少了个空格!) 和 awk引用外部变量判断

一.if判断 数字: $A=12 $B=15 if(("$A"<"$B")) if(("$A"=="$B")) 字符串: $A="HELLO" $B="WORLD" if [ "$A" = "FACT_LOGIN_USER" ] if [ "$A" = "$B" ] PS:字符串比较的时候注意 'if'

小白学开发(iOS)OC_ 字符串的比较判断(2015-08-12)

// //  main.m //  字符串的比较判断 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //  1. 判断字符串是否为空 NSString *str = @&q