算法与数据结构 字符串

目录

 

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

参考回答:

● 手写代码:字符串逆序

参考回答:

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

参考回答:

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

参考回答:

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

参考回答:


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

参考回答:

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]

● 手写代码:字符串逆序

参考回答:

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)!='\0')

{

*dst='\0';

}

return ret;

}

模拟strcat:

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:

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

{

assert(dst != NULL);

assert(src != NULL);

char *ret = dst;

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

{

dst++;

}

while (n)

{

*dst = *src;

dst++, src++;

n--;

}

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

{

*dst = '\0';

}

return ret;

}

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

参考回答:

int main()

{

char buffer[80]="AaABbBcBbcvQv";

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

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

printf("ok");

printf("%c\n",buffer[i]);

return 0;

}

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

int j=i;

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

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

j++;

}

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

if((i-1)>0){

i=i-1;

}

}

printf("%c\n",buffer[i]);

}

return 0;

}

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

参考回答:

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

猜你喜欢

转载自blog.csdn.net/u012369559/article/details/89511417