• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

第5章 第7节 字符串

互联网 diligentman 2个月前 (01-04) 25次浏览

● 手写代码:两个字符串的最长公共子序列?

参考回答:

复制代码

1

2

3

4

5

6

7

8

9

10

11

class LCS:

def findLCS(self, A, n, B, m):

dp=[([0]*(m+1)) for i in range(n+1)]

for i in range(1,n+1):

for j in range(1,m+1):

if(A[i-1]==B[j-1]):

dp[i][j]=dp[i-1][j-1]+1

else:

dp[i][j]=max(dp[i-1][j],dp[i][j-1])

# write code here

return dp[n][m]

● 手写代码:字符串逆序

参考回答:

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

char* str_reverse(char* str)

{

int n = strlen(str) / 2;

int i = 0;

char tmp = 0;

for(i = 0; i < n; i++)

{

tmp  = str[i];

str[i] = str[strlen(str)-i-1];

str[strlen(str)-i-1] = tmp;

}

return str;

}

● 手写代码:字符串复制函数

参考回答:

模拟strcpy:

char* my_strcpy(char* dst, const char*src){assert(dst != NULL);assert(src != NULL);char *ret = dst;while (*dst = *src){dst++, src++;}return ret;}

模拟strncpy:


char* my_strncpy(char* dst,const char* src,int n){assert(dst!=NULL);assert(src!=NULL);char* ret=dst;while(n){*dst=*src;dst++;src++;n--;}if(*(dst-1)!=''){*dst='';}return ret;}

模拟strcat:

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

char *my_strcat(char* dst, char* src)

{

assert(dst != NULL);

assert(src != NULL);

char *ret = dst;

while (*dst)

{

dst++;

}

while (*dst = *src)

{

dst++, src++;

}

return ret;

}

模拟strncat:

复制代码

1

2

3

4

5

char *my_strncat(char* dst, const char *src, int n)

{

assert(dst != NULL);

assert(src != NULL);

char *ret = dst;

while (*dst)//将dst的指针移到‘'处

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

{

dst++;

}

while (n)

{

*dst = *src;

dst++, src++;

n--;

}

if (*(dst - 1) != '')

{

*dst = '';

}

return ret;

}

● 手写代码:驼峰字符串问题,给定一个驼峰样式的字符串例如“AaABbBc++BbcvQv........”->“bc”,两个一样的字符夹着一个不一样的字符, 处理这个字符串去掉所有的驼峰。

参考回答:

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

int main()

{

char buffer[80]="AaABbBcBbcvQv";

for(int i=0;buffer[i]!='';i++){

if(buffer[i+2]==''){

printf("ok");

printf("%cn",buffer[i]);

return 0;

}

if(buffer[i]==buffer[i+2] && buffer[i]!=buffer[i+1]){

int j=i;

while(buffer[j+3]!=''){

buffer[j]=buffer[j+3];

j++;

}

buffer[(j+2)]='';

if((i-1)>0){

i=i-1;

}

}

printf("%cn",buffer[i]);

}

return 0;

}

● 手写代码:给一个字符串找出第一个只出现一次的字符位置

参考回答:

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

def first_not_repeating_char(string):

if not string:

return -1

resultDict = {}

for k, s in enumerate(string):

resultDict [s] = [resultDict [s][0] + 1,k] if resultDict .get(s) else[1,k]

pos = len(string)

ret = None

for x in resultDict :

if resultDict [x][0] ==1 and resultDict [x][1] <pos:

pos = resultDict [x][1]

ret = (x,pos)

return ret

第5章 第7节 字符串

{{o.name}}


{{m.name}}


程序员灯塔
转载请注明原文链接:第5章 第7节 字符串
喜欢 (0)