1. 程式人生 > >判斷一個字串的所有字元是否都在另一個字串中

判斷一個字串的所有字元是否都在另一個字串中

網上流傳了一個故事,說是在google面試的故事,故事中說最後一道面試題就是假設有兩個字串,一個長一些(字串1),一個短一些(字串2),如何判斷這個短字串中的每個字元是否都在這個長字串中。假設每個字串都是由26個小寫字母組成的。

最後這個大牛提到了用一個素數代表一個字母,把字串1的字母的積(當然會很大)算出來,然後除以字串2的每個字元代表的素數。如果每個字元代表的素數都能被整除,說明字串2中的每個字元都在字串1中。時間複雜度為O(n+m)

這確實是一個巧妙的方法,不過實現起來卻不是很容易。這裡針對這個特殊的要求,可以用點陣圖或者hash的思路來解決。

無論是字串1還是字串2,都是由【a-z】字母組成的,所以最多隻有26個字母,所以只要一個整數(32位)就可以表示字串所表示的字母,假設這個字母出現,則對應的位置1,那麼就算26個字母都出現了,也只需要26位置1.則該思路的c++實現程式碼如下:

bool is_contained(const char* str1,const char* str2)
{
        int strmap = 0;
        const char * pstr = str1;
        while(*pstr != '\0')
        {
                strmap |= ( 1 << (*pstr - 'a'));
                pstr++;
        }
        pstr = str2;
        bool iscontained = true;
        while(*pstr != '\0')
        {
                if((strmap & (1 << (*pstr - 'a')))  == 0)
                {
                        iscontained = false;
                        break;
                }

                pstr++;
        }
        return iscontained;

}

相關推薦

【程式設計之法】如何最快的判斷出短字串b所有字元是否在長字串a?編寫函式bool StringContain(string&b,string&a)實現此功能。

舉例: 如果字串a是“ABCD”,字串b是“BAD”,答案是true. 如果字串a是“ABCD”,字串b是“BCE”,答案是false. 如果字串a是“ABCD”,字串b是“AA”,答案是true. 此處列舉四種方法: 解法一:蠻力輪詢 也是一般最容

判斷一個字串所有字元是否一個字串

網上流傳了一個故事,說是在google面試的故事,故事中說最後一道面試題就是假設有兩個字串,一個長一些(字串1),一個短一些(字串2),如何判斷這個短字串中的每個字元是否都在這個長字串中。假設每個字串都是由26個小寫字母組成的。 最後這個大牛提到了用一個素數代表一個字母,把

一個字串包含一個字串所有字元的最短子串長度?——《程式設計之美》最短摘要的生成的簡化

題目: 給定一個字串及一個字串集合A,求該字串中包含A中所有字元的最短子串長度。 解決方案一: 最直接的方法就是,直接開始遍歷:查詢任意兩個子串之間是否包含str2,如果包含,記錄下長度,求得最小值即可。 str1 = "daebfacba"; str2 = "abc";

Oracle判斷指定字串拆分後是否包含一個字元

create or replace function isContained /****************************************************   ** created by lixiaobin   ** 函式名稱:isContai

有一字串,包含n個字元。寫一函式,將此字串從第m個字元開始的全部字元複製成為一個字串

import java.util.Scanner; public class Main {     public static void main(String[] args) {         Scanne

去除字串裡面的某些字元替換成一個字元

1. 使用方法為  replace()   1.1 如下程式碼: package testdemo; public class TestReplace { public static void main(String[] args) { String

ACMNO.40 C語言-子串 有一字串,包含n個字元。寫一函式,將此字串從第m個字元開始的全部字元複製成為一個字串

題目描述 有一字串,包含n個字元。 寫一函式,將此字串中從第m個字元開始的全部字元複製成為另一個字串。 輸入 數字n 一行字串 數字m 輸出 從m開始的子串 樣例輸入 6 abcdef 3 樣例輸出 cdef 來源/分類 C語言

8.7 有一字串,包含n個字元。寫一個函式,將此字串從第 m個字元開始的全部字元複製成為一個字串

8.7 有一字串,包含n個字元。寫一個函式,將此字串從第 m個字元開始的全部字元複製成為另一個字串。個人程式碼如下:#include<stdio.h> #include<string.

【c語言】一個字串,包含n個字元。將此字串從第m個字元開始的全部字元複製成為一個字串

#include <stdio.h> #include <string.h> int main() { void copystr(char *,char *,int); int m; char str1[20],str2[20]; print

字串從第m個字元 開始的全部字元複製成一個字串

/*輸入一個字串,將該字串中從第m個字元 開始的全部字元複製成另一個字串。m由使用者 輸入,小於字串的長度。*/ #include <stdio.h> #include <stdli

bat復制文件夾下所有文件到一個目錄

winpcap pca echo environ copy pat npc 添加 tool 一個需求,王章著了半天都是錯了,所喲記一下吧。 copy是文件拷貝,文件夾拷貝需要用到xcopy @echo off::當前盤符set curPath=%cd%set digPath

C#判斷某個字符串是否在一個字符串數組

bsp strong message blog 使用 AS 比較 默認 dialog 方法一: 需要用到的幾個方法 string.Split(char);//按照char進行拆分,返回字符串數組 Array.IndexOf(Array,string):返回指定string在

判斷一個字符串是否在一個字符串

分隔符 set 判斷 很大的 tr1 逗號 也會 特殊 fin find_in_set(str,str1) 判定str是否在str1中有,如果有,則返回其在str1中的位置,如果沒有,返回0 eg:select find_in_set(‘13教‘,"瀏陽基地,耕耘基地

linux下將一個目錄下的所有檔案拷貝到一個大檔案,並把大檔案拆分成原來的小檔案,大小,內容,名字不變

經過四五天的編寫與除錯,初步完成了檔案操作工具的內容,以下是程式碼說明: 首先,我測試用的檔案在/home/xudong/mywork下,我的最終生成檔案是在這個路徑下,/home/xudong/work/resultfile.txt,分開後生成的小檔案在/home/xud

字串以逗號拼接成一個字串儲存

StringBuilder sb = new StringBuilder(); StringBuilder sbId = new StringBuilder(); for (LMSLabConfigLabClassGroup lmsLabConfigLabClassGroup

判斷B陣列所有元素是否在A陣列

function check(A,B) {         var flag;         for(var bObj in B)         { &nb

將SVN倉庫裡面的一個資料夾的所有內容複製到一個資料夾下

** 需要注意的是,在VisualSVN(也就是伺服器上)上只能刪除資料夾和建立資料夾,而不能對裡面的檔案和資料夾進行移動和複製,要想移動和複製檔案及資料夾需要在TortoiseSVN(客戶端)進行。(假設電腦上安裝了TortoiseSVN) 1. 在客

每天學點linux--(用shell實現將一個資料夾下面的所有檔案拷貝到一個資料夾下/shell下如何重新命名一個檔案)

一、用shell實現將一個資料夾下面的所有檔案拷貝到另一個資料夾下 收穫: 1、在if test -d $1的時候,if後面一定要有空格 2、在使用變數的時候一定要用$! 3、學會`commad`的用法 下面給出程式碼,還有一些不完善的地方,有空補全一下,第一次shell

一個字串字元變為其前一個字元

華碩2011年校園招聘筆試題 如:[email protected]#sd變為[email protected]#re #include <stdio.h> #include <string.h> #define MAX 10

iOS_如何判斷是否安裝某個App並從一個App啟動該App(未安裝跳轉到AppStore)

轉載自:http://blog.csdn.net/delegate_m/article/details/51263059 非常感謝博主的分享 前言: 非越獄裝置,在你的應用裡無法知道系統安裝了什麼別的應用。  如果想要準確的通過程式控制和發現本地安裝的應用,目前