牛客網 程式設計題練習 字串陣列相關

2021-08-21 06:32:25 字數 3548 閱讀 8470

day 01

第一題:

題目:在字串中查詢第一次出現且只出現一次的字元。

如輸入「asdfgfdsa」,則輸出『g』。

演算法解析:

演算法1:

從頭到尾開始掃瞄這個字串。當訪問到某個字元時,一次和後面的字元比較。如果後面字元沒有與該字元相同的字元,就說明這個字元是第一次出現的字元。如果字串有n個字元,每個字元可能與後面的o(n)個字元相比較,因此這種思路時間複雜度是o(n^2)。

解法二,

既然題目與字串中字元的次數有關,我們可以來統計一下字元出現的次數。那麼怎麼統計這個次數呢

我們需要一種容器,這種容器可以存放字元出現的次數。並且次數和還存在著一種對映關係。

能夠滿足這種需求的容器就是雜湊表了。我們可以將字元的ascii碼值作為雜湊表的下標,即key值。字元出現的次數,作為雜湊表對應下標內容。即value值。

//初始化雜湊表

int i=0;

for(;i0;

}//根據字元acsii碼值

//確定雜湊表的key值和雜湊表的value值

char *hashkey=pstring;

while(*hashkey!='\0')

hashkey=pstring;

while(*hashkey!='\0')

hashkey++;

}return

'\0';

}int main()

執行結果:

expected o,actual :o

expected ,actual :

expected o,actual :o

expected ,actual :o

第2題:在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

解題思路:

解法1.以行為單位。依次遍歷陣列的每個元素,這種演算法的時間複雜度為為n^2

解法2,根據陣列的特性,從左到右,一次增大,從下到上,一次減小。可以將我們的搜尋出發點設為左下角的座標,這樣如果查詢的元素比左下角的元素大,則了列數+1,如果比左下角的元素小,就把行數-1。如果相同,則說明找到了。其他元素同理。

1.求出行數,列數

2,設定出發點為左下角的點

3.開始迴圈查詢

( 1)如果目標元素比陣列元素小,則將行數減1

( 2)如果目標元素比陣列元素大,則將列數加1

( 3)如果目標元素與陣列相等,則返回true;

class solution

else

if(target

else

}return

false;}};

第3題輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。1.定義兩個指標:快指標,

2.慢指標。讓快指標從頭指標開始遍歷先走k-1步,此時,慢指標保持不變。

3.從第k步開始,慢指標也開始從鍊錶的頭指標開始遍歷。由於連個指標距離保持在k-1步,當快指標到達鍊錶的節點時,慢指標剛好走到第k個節點

class solution 

while(p2->next !=

null)

return p1;}};

求乙個字串中的最大長度的數字字串,並將該字串的長度返回解析:

要求取出最長數字字串,說明字串中可能存在多個數字字串,因此我們要設定乙個變數(tmpcount)來儲存最大字串的長度,還需要定義乙個變數來儲存臨時字串等的長度(maxcount)。並設定乙個inode記錄數字字串的位置。

當遇到數字時,tmpcount開始計數,如果此時tmpcount大於maxcount,則更新maxcount和inode.否則保持不變。

如果不是數字,tmpcount置為0即可。

遍歷完成,如果maxcount沒有更新,則直接返回空串

否則開始拷貝最大長度的數字字串。

//開始迴圈遍歷字串

int i=0;

for(i=0;iif(inputstr[i]>='0' && inputstr[i]<='9')

}else

}if(maxcount==0)

//開始拷貝目標字串

*oputstr=(char *)malloc(sizeof(char)*(maxcount+1));

strncpy(*oputstr,inputstr+tmppos-maxcount+1,maxcount);

(*oputstr)[maxcount]='\0';//此處*oputstr必須加括號,否則會產生段錯誤

return maxcount;

}int main()

執行結果:

[zyc@localhost

string]$ ./a.out

asdf123

數字字串:123

num=3

[zyc@localhost

string]$ ./a.out

a1s2d3

數字字串:3

num=1

[zyc@localhost

string]$ ./a.out

asdfg

數字字串:

num=0

[zyc@localhost

string]$ ./a.out

123456

數字字串:123456

num=6

程式設計練習 字串相關

1.題目 設計函式 void insert char s,char t,int pos 在串s的位置pos 1和pos之間插入串t。假設分配給串s的空間足以插入串t。要求不使用任何字串庫函式。include using namespace std void insert char s,char t,...

牛客網習題練習 倒置字串

題目表述 將一句話的單詞倒置,標點不倒置,例如 輸入 i like beijing.輸出 beijing.like i 實現思路 設定兩個棧,先將字串逐個壓入第乙個棧,如果遇到空格的話就說明乙個單詞結束,將第乙個棧的所有元素包括空格壓入第二個棧,迴圈執行,直到字串全部入棧。最後,依次pop第二個棧,...

程式設計練習 字串系列

1 空格替換 請編寫乙個方法,將字串中的空格全部替換為 20 假定該字串有足夠的空間存放新增的字元,並且知道字串的真實長度 小於等於1000 同時保證字串由大小寫的英文本母組成。給定乙個string inistring 為原始的串,以及串的長度 int len,返回替換後的string 測試樣例 m...