前言
原文請查看:《演算法零基礎100講》字串演算法
目錄
- 前言
- 劍指 Offer 05. 替換空格
- 分析
- 代碼
- 面試題 10.05. 稀疏陣列搜索
- 分析
- 代碼
- 1309. 解碼字母到整數映射
- 分析
- 代碼
- 1967. 作為子字串出現在單詞中的字串數目
- 分析
- 代碼
- 練習題
劍指 Offer 05. 替換空格
原題鏈接:劍指 Offer 05. 替換空格

分析
我的做法是先統計空格個數,再決定申請空間的大小,
然后遍歷字串,如果遇到空格,就將其替換,
代碼
char* replaceSpace(char* s)
{
if(NULL == s) return NULL;
//統計空格個數
int count = 0;
for (int i = 0; i < strlen(s); ++i)
{
if (s[i] == ' ')
count++;
}
//申請新空間
char* ans = (char*)malloc(sizeof(char) * strlen(s) + count * 2 + 1);
int i = 0, j = 0;
for (i; i < strlen(s); ++i, ++j)
{
ans[j] = s[i];
if (s[i] == ' ')
{
ans[j++] = '%';
ans[j++] = '2';
ans[j] = '0';
}
}
ans[j] = '\0';
return ans;
}
面試題 10.05. 稀疏陣列搜索
原題鏈接:面試題 10.05. 稀疏陣列搜索

分析
遍歷字串陣列,然后
直接使用庫函式(滑稽),,,
代碼
int findString(char** words, int wordsSize, char* s)
{
for (int i = 0; i < wordsSize; ++i)
{
if (strcmp(s, words[i]) == 0)
{
return i;
}
}
return -1;
}
1309. 解碼字母到整數映射
原題鏈接:1309. 解碼字母到整數映射

分析
動態申請一個新的字串,再宣告一個表示下標的變數,
遍歷原字串,判斷正在遍歷的下標和字串長度的關系,如果滿足小于字串長度,再判斷該下標往后2個位置是否為 ‘#’,是的話就將其改為 " j~z";否則改成 " a ~ i",,
代碼
char * freqAlphabets(char * s)
{
char* str = (char*)malloc(sizeof(char) * strlen(s) + 1);
int strSize = 0;
for (int i = 0; i < strlen(s); ++i)
{
if (i + 2 < strlen(s) && s[i + 2] == '#')
{
str[strSize++] = ((s[i] - '0') * 10 + (s[i + 1] - '1') + 'a');
i += 2;
}
else
{
str[strSize++] = s[i] - '1' + 'a';
}
}
str[strSize] = '\0';
return str;
}
1967. 作為子字串出現在單詞中的字串數目
原題鏈接:1967. 作為子字串出現在單詞中的字串數目

分析
直接使用庫函式 strstr
函式原型:
char* strstr(char* str1, char* str2);
意義:找出在字串str1中 第一次出現字串str2的位置(即str2如果是str1的子串),找到就回傳該字串位置的指標,不存在則回傳 NULL,
代碼
int numOfStrings(char ** patterns, int patternsSize, char * word)
{
int count = 0;
for (int i = 0; i < patternsSize; ++i)
{
if (strstr(word, patterns[i]))
{
count++;
}
}
return count;
}
練習題
原題鏈接:290. 單詞規律

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/356739.html
標籤:其他
上一篇:【C++學習】——(四)型別
下一篇:冪模函式方程組的解法(一)
