1. 程式人生 > >面試題:字串移位包含問題

面試題:字串移位包含問題

問題描述挺簡單的,就是給兩個字串,判斷一個是否可以被另一個迴圈移位(定義向右迴圈移位)得到的字串包含(也可為本身,也可為子串)解法一我們可以先直接進行字串的移位工作,在進行字串包含的判斷,從而遍歷器所有的可能性但是這個方法比較浪費,因為要遍歷所有的可能性並且要進行字串的移位,並且在移位的過程中一不小心就會將字串覆蓋掉,所以一定要小心程式碼如下//直接翻轉bool Judge( char *str1,const char *str2, int len){//判斷字串是否為空if (str1 != NULL)     {if (strlen(str1) == 0)           {return false;           }     }if (str2 != NULL
)     {if (strlen(str2) == 0)           {return false;           }     }int i = len;for (i = 0; i < len; i++)     {char tmp = str1[len-1];int j = len - 1;for (; j > 0; j--)           {str1[j] = str1[j - 1];           }str1[0] = tmp;if (strstr(str1, str2) != NULL)           {return true;           }
     }return false;}紅字就是這段程式碼的重點在進行字串移位的過程中我們先把最後一個字母儲存起來,防止被覆蓋掉然後從最後一個字母開始進行移位覆蓋,將它的前一個的字母賦值給它自己,然後最後把你儲存的最後一個字母賦值給第一個位置即可就是這樣!!!                                        j-1      tmp
AABCD
解法二我們可以先對迴圈移位後的結果進行分析,例如AABCDAABCD-->DAABC-->CDAAB-->BCDAA-->ABCDA-->AABCD-->...如果我們將後面移走的資料進行保留,會發現有如下規律
AABCD-->DAABCD-->CDAABCD-->BCDAABCD-->ABCDAABCD-->AABCDAABCD(s3)我們可以發現如果S2可由S1迴圈移位得到,那麼S1必定為S3的子串(S3很明顯是S1的2倍這個方法比較簡單,難點是由S1得到S3,我們就要使用字串函式bool Judge(const char *str1, const char *str2 ){//判斷字串是否為空if (str1 != NULL)           {if (strlen(str1) == 0)                {return false;                }           }if (str2 != NULL)           {if (strlen(str2) == 0)                {return false;                }           }char str3[20] = {0};           strcpy(str3, str1);//將str1的字串拷貝到str3中,S3="AABCD"           strcat(str3, str1);//將str1的字串拼接到str3中,S3="AABCDAABCD"if (strstr(str3, str2) != NULL)           {return true;           }else           {return false;           }           free(str3);}int main(){char *str1 = "AABCD";char *str2 = "CDAA";int n = 3;bool result= Judge(str1, str2);if (result == true)     {           printf("成功!!");     }else     {           printf("失敗!!");     }     system("pause");return 0;}這個程式碼本身是十分容易想到的,但是有考了很多字串函式的知識點strcpy:字串拷貝函式講一個字串拷貝到另一個字串內,包括‘\0’strnpy:指定長度的拷貝,不會將‘\0’拷貝進去strcat:字串拼接函式,必須保持我們拼接的這個目的字串擁有足夠的空間來儲存這拼接的字串,在拼接的時候會將原字串後的‘\0’去掉,並且在拼接完成後的字串後面新增‘\0’strncat:在拼接之後的字串會自動加‘\0’strstr:判斷一個字串是不是另一個字串的子串,如果是返回一個非空值!!!而且在進行監視視窗監視的時候,監視只有在中斷的時候才可以用,並且在函式執行完結束以後,所有的變數都已釋放,監視的話都會顯示無法計算,所以我們可以在函式執行的時候打一個斷點,就可以監視到了

相關推薦

試題字串移位包含問題

問題描述挺簡單的,就是給兩個字串,判斷一個是否可以被另一個迴圈移位(定義向右迴圈移位)得到的字串包含(也可為本身,也可為子串)解法一我們可以先直接進行字串的移位工作,在進行字串包含的判斷,從而遍歷器所有的可能性但是這個方法比較浪費,因為要遍歷所有的可能性並且要進行字串的移位,

試題字串出現次數最多的字母和次數(基礎思路篇)

今天中午公司要求的小功能寫完之後,想了想之前的一道面試題。 題目: 給一個字串,找到出現次數最多的字母和次數(手寫程式碼) 當時想到了用map,但是寫了一半感覺到自己對map還是不熟練,手寫寫不出來,於是就換了個思路。 原理: 通過字串分割函式分割字串,判斷分割後的長度來比較字母的次

試題字串單詞對換,字串排序

    //字串單詞對換 $str = "str_arr"; echo $str."\n"; $arr = explode("_",$str); print_r($arr); $st

C#試題字串中字元出現的次數

尋找字串中出現次數最少,位置靠前的字元。 需要引用:using System.Collections.Generic; void FindChar(string str){     //使用字典Dictionary<key,value>來儲存字元,出現次數。

Java---練習(試題) 字串擷取(2-最終版)

在java中,字串“abcd”與字串“ab你好”的長度是一樣,都是四個字元。 但對應的位元組數不同,一個漢字佔兩個位元組。 定義一個方法,按照指定的位元組數來取子串。 如:對於“ab你好”,如果取三個位元組,那麼子串就是ab與“你”字的半個,那麼半個

資料結構經典試題多種方法實現字串迴圈移位

來源:我是碼農,轉載請保留出處和連結! 本文連結:http://www.54manong.com/?id=12 問題描述:     要求在時間複雜度和空間複雜度分別為O(n)和O(1)的條件下把一個長度為N的字串迴圈左移M位,例如將長度為9的字串"12345

試題編寫一個函式來查詢字串陣列中的最長公共字首。 如果不存在公共字首,返回空字串 ""。(c++實現)

例項說明 示例 1: 輸入: ["flower","flow","flight"] 輸出: "fl" 示例 2: 輸入: ["dog","racecar","car"] 輸出: "" 解釋: 輸入不存在公共字首。 說明: 所有輸入只包含小寫字母 a-z&

試題:一個字串包含英文和特殊字元,特殊字元不變,英文順序反過來,比如string str="[email 

public class Reverse { public static void main(String[] args) { String str = "[email protected]!tk"; char[] chars = str.toCh

python字串試題找出一個字串中第一個字母和最後一個字元是第一次重複,中間沒有重複且最長的子串

1.給出任意一個字串,列印一個最長子串字串及其長度,如果有相同長度的子字串,都要一起打印出來,該子字串滿足以下條件, 第一個字母和最後一個字元是第一次重複 這個子字串的中間字母沒有重複 這個子字串是滿足條件裡面的最長的 如: adsasadmasd 中滿足條件的是dmasd   im

C#試題數字字串格式轉換

例如輸入:123456789,輸出:”1,2345,6789“ 示例程式碼如下: using System.Text; string Format(string str){     StringBuilder sb=new StringBuilder();//使用

C#試題輸入一個長度100的數字字串,判斷是否能被7整除

輸入一個長度為100的數字字串,首字元不能是0,判斷是否能被7整除。 思路:把字串中各個位數字拿出來與7取餘,如果最後為0,表示可以整除,不為0表示不能整除。 例如:504:5%=5,50%7=1,14%7=0等於0。那麼504能被7整除。             21

資料結構經典試題字串中找到出現頻率大於50%的那個字元

來源:我是碼農,轉載請保留出處和連結! 本文連結:http://www.54manong.com/?id=13 問題描述: 在某個字串中(字串可能很長,比如有幾千萬個字元),請找出某個出現頻率大於50%的那個字元。例如:在字串"aabcdaa"中,字串長為7,字元'a'出現了4

劍指Offer試題34.翻轉單詞順序VS左旋轉字串

一、題目一:翻轉單詞順序 1.1 題目說明 題目一:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。為簡單起見,標點符號和普通字母一樣處理。例如輸入字串"I am a student.",則輸出"student. a am I"。 1.2 解題思路   第一步翻轉句子中所有的字

劍指Offer試題19.包含Min函式的棧

一、題目:包含Min函式的棧 題目:定義棧的資料結構,請在該型別中實現一個能夠得到棧的最小元素的min函式。在該棧中,呼叫min、push及pop的時間複雜度都是O(1)。   這裡我們要實現的就是min、push以及pop三個方法: public class MinInStack&

劍指Offer試題35.將字串轉換為數字

一、題目:將字串轉換為數字 題目:寫一個函式StrToInt,實現把字串轉換成整數這個功能。當然,不能使用atoi或者其他類似的庫函式。 二、程式碼實現   (1)考慮輸入的字串是否是NULL、空字串   (2)考慮輸入的字串是否包含正負號或者是否是隻包含正負號   (3)考慮輸入的字串是否

《劍指Offer》試題字串轉換為整數

題目 題目:把字串轉化為整數 ,若輸入無效,則返回0且將標誌位設為true 自己以前在一些書上面看到過關於 字串轉化為整數的例子,心中有點印象,知道要考慮一些特殊情況。今天決定寫下這段程式碼,發現程式碼寫的稀爛,重複度太大,需要改善。 剛實現的程

試題:一個字串包含英文和特殊字元,特殊字元不變,英文順序反過來,比如string str="[email prot

public class Reverse { public static void main(String[] args) { String str = "[email protected]!tk"; char[] char

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

給一個S1=”AABCD”,判斷S2是否能通過S1移位得到,例如S2=“CDAA”,應該返回true。 #include<iostream> #include<string>

試題給定一個數組,陣列中只包含0和1。請找到一個最長的子序列,其中0和1的數量是相同的

這個題目,看起來比較簡單,一些同學可能認為題目的描述符合動態規劃的特徵,然後就開始用動態規劃解,努力找狀態轉移方程。這些同學的感覺,是很正確的。但,找狀態轉移方程,我們要對原來的陣列進行變換一下。 原來是0和1的串,我們將0都換為-1。這樣題目目標就變成,找到一個最長的子串,子串數字和是0。設原陣列為A