您的位置:首页 > 职场人生

编程之法-面试和算法心得 - 笔记

2017-07-04 08:25 351 查看
一、字符串翻转

三步反转法,先将两部分分别反转,然后再整体反转。
abcdef -> defabc

(1)cbadef // 旋转前一部分;

(2)cbafed // 旋转后一部分;

(3)defabc // 整个旋转

那么将“I am a student.” -> "studnet. a am I",也类似。

二、字符串的包含

a = "abcxyzlmnopreset"

b = "abxy"

a,b中只包含小写字母。

如何判断b中的字符都包含在字符串a中 ?

Hash,由于只有26个小写字母,可以使用整数代替散列表。

先将a中字母放入散列表,再根据b中的字母进行判断。

作者认为还不完美 ?是否要将b放入散列表,而使用a进行对比 ?

因为b的每个字母都必须被检查到,最好的情况,可能比较少了a中字母就可以得出结果了,最坏的情况,a中字母都需要比较。

若包含任意字母的字符串,如何处理?

三、字符串的全排列

P = permutation, C = combination

排列有顺序,组合无顺序

P(n,m) = n! / (n-m)!

C(n,m) = n! / ( (n-m)! * m! )

C(n,m) = C(n, n-m)

循环排列数P(n,r) = n! / ( (n-r)! * r! ) 即,r个头不涉及排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: