目录
● 手写代码:驼峰字符串问题,给定一个驼峰样式的字符串例如“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