This commit is contained in:
nonstriater
2015-12-02 15:06:16 +08:00
parent 4b0f158c28
commit 08b93b3f85
4 changed files with 77 additions and 47 deletions
+5 -4
View File
@@ -197,11 +197,12 @@ http://www.cs.usfca.edu/~galles/visualization/Algorithms.html
###编程网站
http://leetcode.com/
http://oj.leetcode.com/
http://openjudge.cn/ POJ。这有个POJ上的ACM训练方案 http://www.java3z.com/cwbwebhome/article/article19/res041.html
http://ac.jobdu.com/index.php 九度OJ
http://leetcode.com/
http://openjudge.cn/ 开放在线程序评测平台,可以床架自己的OJ小组
http://ac.jobdu.com/index.php 九度OJ
这有个ACM训练方案 http://www.java3z.com/cwbwebhome/article/article19/res041.html
## 补充:C语言代码规范
+11
View File
@@ -0,0 +1,11 @@
题目来自[leetcode](https://leetcode.com/)
#### Minimum Height Trees
#### Additive Number
+5
View File
@@ -0,0 +1,5 @@
题目来自 [九度OJ](http://ac.jobdu.com/index.php)
+56 -43
View File
@@ -292,30 +292,6 @@ int atoi(const char *str){
详细过程也可以[参考这里](http://blog.csdn.net/v_july_v/article/details/9024123)
#### 匹配兄弟字符串
如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,问如何在迅速匹配兄弟字符串(如,bad和adb就是兄弟字符串)。
思路:判断各自素数乘积是否相等。更多方法请参见:http://blog.csdn.net/v_JULY_v/article/details/6347454。
```
int isBrother(const char *first,const char *secd)
```
思路一: 循环匹配 指数级复杂度
思路二: 利用质数,平方和比较,但这样必须是2个串的长度要一样,需要的空间比较大,最多256个字节。
示例代码:
```
int isBrother(const char *first,const char *secd){
}
```
#### 删除串中指定的字符
删除指定的字符以后,后面的字符都要向前移动一位。这种复杂度是O(N^2);那么有没有O(N)的方法呢?
@@ -361,15 +337,22 @@ char *delete_occurence_characterset(char *source,const char *del);
题目描述:“abeeeeegaaaffa" 压缩为 "abe5ag3f2a",请编程实现。
这道题需要注意:
1. 单个字符不压缩
2. 注意考虑压缩后某个字符个数是多位数(超过10个)
3. 原地压缩最麻烦的地方就是数据移动
这是使用2个指针,一前一后,如果不相等,都往前移动一位;如果相等,后一位变为数字2,且移动后面的指针一位,任然相等则数字加1,不相等
```
char *compress(const char *src,char *dest){
}
```
上面的压缩算法可以看到,压缩算法的效率验证依赖给定字符串的特性,如果'aaaaaaaa....aaa' 这样特征的字符串,使用上面的压缩算法,压缩率接近100%,相反,可能会的0%的压缩率。
上面的压缩算法可以看到,压缩算法的`效率`验证依赖`给定字符串的特性`,如果'aaaaaaaa....aaa' 这样特征的字符串,使用上面的压缩算法,压缩率接近100%,相反,可能会的0%的压缩率。
@@ -378,13 +361,9 @@ char *compress(const char *src,char *dest){
如字符串”abc123de4fg56”处理后变为”abcdefg”。注意空间和效率。
(下面的算法只需要一次遍历,不需要开辟新空间,时间复杂度为O(N))
#### 字符串匹配实现
请以俩种方法,回溯与不回溯算法实现。
```
void trim_number(char *source);
```
#### 对称子字符串的最大长度
@@ -397,12 +376,16 @@ char *compress(const char *src,char *dest){
int max_symmetrical_char_length(const char *scr);
```
思路一:蛮力法,3重循环(类似 求子数组的最大和 fmax(i,j)问题), fmax(i,j)区间i,j是最长的对称字符
思路一:蛮力法,3重循环(类似 求子数组的最大和 fmax(i,j)问题), fmax(i,j)区间i,j是最长的对称字符
思路二:遍历所有子串,然后判读是否对称 O(n^2)
思路三:有个O(n)复杂度的 http://www.jb51.net/article/48090.htm
思路二: 遍历所有子串,然后判读是否对称 O(n^2)
思路三: 有个O(n)复杂度的 http://www.jb51.net/article/48090.htm
```
int max_symmetrical_char_length(const char *scr){
}
```
#### 字符串中找出连续最长的数字串
@@ -413,14 +396,13 @@ int max_symmetrical_char_length(const char *scr);
例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,outputstr所指的值为123456789
它的原形是
它的原形是:
```
int continumax(char *outputstr,char *intputstr)
```
#### 子串匹配的个数
已知一个字符串,比如asderwsde,寻找其中的一个子字符串比如sde的个数,如果没有返回0,有的话返回子字符串的个数。
@@ -433,7 +415,7 @@ char *sub_str_count(const char *src, const char *substr, int *count)
#### 求最大连续递增数字串
(如“ads3sl456789DF3456ld345AA”中的“456789”)
如“ads3sl456789DF3456ld345AA”中的“456789”就是所求。
```
int continuousnum(const char *input, char *output)
@@ -447,15 +429,46 @@ int continuousnum(const char *input, char *output)
请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。
例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串,则输出它们的长度4,并打印任意一个子串。
如"abccade","dgcadde"的最大子串为"cad"
分析:求最长公共子串(Longest Common Subsequence, LCS)是一道非常经典的动态规划题,因此一些重视算法的公司像MicroStrategy都把它当作面试题。
```
int longest_common_subsequence(const char *s1,const char *s2, char *common)
```
分析:求最长公共子串(Longest Common Subsequence,LCS)是一道非常经典的动态规划题,因此一些重视算法的公司像MicroStrategy都把它当作面试题。如"abccade","dgcadde"的最大子串为"cad"
实例代码:
```
int longest_common_subsequence(const char *s1,const char *s2, char *common){
}
```
#### 匹配兄弟字符串
如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,问如何在迅速匹配兄弟字符串(如,bad和adb就是兄弟字符串)。
思路:判断各自素数乘积是否相等。更多方法请参见:http://blog.csdn.net/v_JULY_v/article/details/6347454。
```
int isBrother(const char *first,const char *secd)
```
思路一: 循环匹配 指数级复杂度
思路二: 利用质数,平方和比较,但这样必须是2个串的长度要一样,需要的空间比较大,最多256个字节。
示例代码:
```
int isBrother(const char *first,const char *secd){
}
```
#### 字符串的排列