● 手写代码:两个字符串的最长公共子序列?
参考回答:
复制代码
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
|
