程式設計之美—字串移位包含問題
驗證字串s2通過移位能否包含字串s1。
(1)逐一移位,驗證是否包含
(2)只需驗證s2s2是否包含s1即可。 s2每隔strlen(s2)次移位後又回到s2,相當於移位後的字串在 s2~s2s2之間。
程式碼實現如下:
// stringContain.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <iostream> using namespace std; //字串s2能否被字串s1移位所包含 bool StrContain(char *s1,char *s2) { if(strstr(s2,s1)) return true; //考慮不移位的情形 int len=strlen(s2); for(int i=0;i<len;i++) { char temp=s2[0]; for(int j=0;j<len-1;j++) { s2[j]=s2[j+1]; } s2[len-1]=temp; if(strstr(s2,s1)) //左移移位後進行條件判斷 { return true; } } return false; } //第二種方法 bool StrContain1(char *s1,char *s) { if(strstr(s,s1)) return true; } //字串連線函式 void Strcon(char *s1,char *s2) { char *p; for(p=s1;'\0'!=*p;p++); //找到s1字串尾部 for(int i=0;'\0'!=s2[i];i++,p++) { *p=s2[i]; } *p='\0'; } int _tmain(int argc, _TCHAR* argv[]) { char s1[]="CDAA"; char s2[]="AABCD"; char *s3="AABCD"; Strcon(s2,s3); cout<<StrContain(s1,s2)<<endl; cout<<StrContain1(s1,s2)<<endl; return 0; }
結果:
此處要注意指向常量區德指標,即指標地址分配為靜態分配,只能讀不能寫。
因而上面s1和s2字元換採用了棧區分配地址,可以改寫內容。
注意strcat(cha *s1, const char *s2),第二個引數為指向常量區德字串指標。
相關推薦
程式設計之美—字串移位包含問題
驗證字串s2通過移位能否包含字串s1。 (1)逐一移位,驗證是否包含 (2)只需驗證s2s2是否包含s1即可。 s2每隔strlen(s2)次移位後又回到s2,相當於移位後的字串在 s2~s2s2之間。 程式碼實現如下: // stringContain.cpp : 定義
程式設計之美 3.1字串移位包含的問題
題目: 給定兩個字串s1和s2,要求判定s2是否能偶被s1做迴圈移位得到的字串包含,例如:給定s1=AABCD s2=CDAA,返回true;給定s1=ABCD 和s2=ACBD,返回false 法一: 將s1依次移動1位,2位....s1.length()位 判斷s2在不
[程式設計之美3.1]字串移位包含的問題
題目:給定字串s1和s2,要求判定s2是否能夠被s1做迴圈移位得到的字串包含。例如給定s1 = AABCD和s2 = CDAA,返回true;給定s1 = ABCD和s2 = ACBD,返回false。 思路一:最直接最暴力的解法就是對字串迴圈移位,再進行字串包含的判斷,
程式設計之美之字串移位包含問題
【題目】 給定兩個字串s1和s2,要求判斷s2是否能夠被通過s1做迴圈移位(rotate)得到的字串包含。例如,S1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD,返回false。 【分析】 【思路一】 從題目中可以看出,我們可以使用最直接的
字串移位包含的問題(程式設計之美)
問題:給定兩個字串s1和s2,要求判斷s2是否能夠被通過s1做迴圈移位(rotate)得到的字串包含。例如,S1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD,返回false。 我們也可以對迴圈移位之後的結果進行分析。 以S1 = A
程式設計之美:3.1 字串移位包含的問題
給一個S1=”AABCD”,判斷S2是否能通過S1移位得到,例如S2=“CDAA”,應該返回true。 #include<iostream> #include<string>
《程式設計之美3.1:字串移位包含問題》
給定兩個字串s1和s2,要求判定s2是否能夠通過s1迴圈移位得到的字串包含。例如,給定s1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD,返回false。 /* ========================================
程式設計之美-3.1字串移位包含問題
假設字串s1=AABCD,s2=CDAA,判斷s2是否可以通過S1的迴圈移位得到字串包含。 如 s1移兩位: 1.ABCDA->2.BCDAA 則此時包含了 S2="CDAA" 解題思路: 分解s1的迴圈移位得到: AABCD,ABCDA,BCDAA,
讀書筆記之程式設計之美 – 3.1 字串移位包含的問題
這個問題雖然只有一顆星,但讓我想卻只能想出解法一的笨解法。看完答案才恍然大悟,原來有這麼一個簡單解法,而且似曾相識。想起以前2.14節的那個陣列首尾相連的問題,是不是也能用這種方法求解啊。 PS: 不知不覺中已經看到了第3章,書看了大概2/3,寫讀書筆記似乎成了看書的動力。
程式設計之美讀書筆記3.1—字串移位包含的問題
給定兩個字串s1和s2,要求判斷s2是否能夠被通過s1做迴圈移位(rotate)得到的字串包含。例如,S1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD,返回false。 1. 最直接的方法對S1進行迴圈移位,遍歷所有可能性。 #i
《程式設計之美》--字串移位包含的問題
對於這道題的前兩種思想書中已經給了比較詳細的解答,下面只是對於前兩種思想的小總結和對第三種思想的闡述。 第一種思想: 真正的移位,比較容易想,實現起來也沒什麼困難。 第二種思想: 移位過程中找到的規律,不論是左移還是右移,如果字串S2包含在S1S1中,那就說明S2可以由S1
19:字串移位包含問題(1.7程式設計基礎之字串)
19:字串移位包含問題 總時間限制: 1000ms 記憶體限制: 65536kB 描述 對於一個字串來說,定義一次迴圈移位操作為:將字串的第一個字元移動到末尾形成新的字串。 給定兩個字串s1和s2,要求判定其中一個字串是否是另一字串通過若干次迴圈移位後的
一個字串中包含另一個字串所有字元的最短子串長度?——《程式設計之美》最短摘要的生成的簡化
題目: 給定一個字串及一個字串集合A,求該字串中包含A中所有字元的最短子串長度。 解決方案一: 最直接的方法就是,直接開始遍歷:查詢任意兩個子串之間是否包含str2,如果包含,記錄下長度,求得最小值即可。 str1 = "daebfacba"; str2 = "abc";
程式設計之美10:計算字串的相似度
我們並不在乎兩個字串變得相等之後的字串是怎樣的,所以 1.一步操作之後,再將A[2,…,lenA]和B[1,…,lenB]變成相同的字串。 2.一步操作之後,再將A[1,…,lenA]和B[2,…,lenB]變成相同的字串。 3.一步操作之後,再將A[2,…,lenA]和B[2,…,lenB]變成相
程式設計之美---最長有效括號字串
題目 給定字串,僅包含左括號‘(’和右括號‘)’,它可能不是括號匹配的,設計演算法,找出最長匹配的括號子串,返回該子串的長度。 如: (():2 ()():4
程式設計之美--3.3計算字串的相似度
許多程式會大量使用字串。對於不同的字串,我們希望能夠有辦法判斷其相似程式。我們定義一套操作方法來把兩個不相同的字串變得相同,具體的操作方法為: 1.修改一個字元(如把“a”替換為“b”); 2.增加一個字元(如把“abdd”變為“aebdd”); 3.刪除一個字元(如把“travelli
程式設計之美7:字串,那些你必須要會的事。
本系列收錄了常見字串面試和筆試中的八道題,更新於2015年4月23日。 如果有問題或想法,請直接留言,交流。 題目一:字串移位包含 問題描述: 給定兩個字串s1和s2,要求判定s2是否能夠被通過迴圈移位得到的字串包含。例如,給定s1 = AABCD和
程式設計之美 求陣列的子陣列之和的最大值(包含擴充套件問題解答)
本程式碼可以通過以下測試用例: 陣列:[1,-2,3,5,-3,2] 返回:8 陣列:[0,-2,3,5,-1,2] 返回:9 陣列:[-9,-2,-3,-5,-3] 返回:-2 程式碼清單如下: #include <iostream> using namesp
程式設計之美6:陣列迴圈移位
樓主又來~(≧▽≦)/~啦啦啦,科研,就是要這麼一鼓作氣。額,其實樓主的老本行是推公式啊,做這些演算法題,其實是樓主在偷懶。額,話不多說了,快請出我們今天的主角吧!還是關於陣列的-陣列迴圈移位。 下面我們來看下題目的要求。 題目要求: 設計一個演算法,
程式設計之美——一摞烙餅的排序(暴搜+剪枝)
題目 分析 深度優先搜尋遍歷每一種情況,去翻轉次數最小的,當然,還要加一些剪枝,畢竟O(nn)的時間複雜度。 程式碼 C風格 1 /**** 字首排序 ****/ 2 #include<stdio.h> 3 #include<cstring> 4 #incl