1. 程式人生 > >程式設計之美—字串移位包含問題

程式設計之美—字串移位包含問題

驗證字串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