判斷一個字串的所有字元是否都在另一個字串中
網上流傳了一個故事,說是在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 非常感謝博主的分享 前言: 非越獄裝置,在你的應用裡無法知道系統安裝了什麼別的應用。 如果想要準確的通過程式控制和發現本地安裝的應用,目前