到现在为止,刷了pat乙级75道, pat甲级82道,leetcode44道,感觉有点盲目,就开个博客,记录一下刷题过程中遇到比较好的题目和写法.
leercode
字符相同的子字符串
Group Anagrams
本题要求将字母一样的单词分到一起。思路是,把每个单词排序(这样所有字母一样的单词的结果都相同),把这个排序后的单词作为索引,储存原先的单词,这样就分好了类。
代码:
值得一提的是sort
能用于字符串的排序。
c++11之后,for
和auto
可以用于更简便的迭代和遍历.
类似的题还有 242. Valid Anagram
其中一种解题思路就是,将2个字符串以同一种方式排序,排序后如果相等的话,就证明这2个字符串中的字符相同。
还有438. Find All Anagrams in a String
在一个字符串中,找到所有与目标字符中所有字符相等的所有子字符串,这题用之前那种排序的算法会超时。
解题代码如下:
维持2个辅助向量,tmp1中储存目标字符串中的字符,用遍历字符串的方法把维持一个与目标字符串长度相同的子字符串,tmp2储存其中的字符信息,如果tmp1和tmp2相同,就代表找到一个。
寻找所有可行路径
62. Unique Paths
, 63. Unique Paths II
和 64. Minimum Path Sum
这3道题的中心思想是从 (0,0) 到(i,j) 的 所有路径总数是与(0,0)到(i-1,j)的路径总数和(0,0)到(i,j-1)的路径总数相关。
代码如下:
062 :
063:
|
|
064:
|
|
其中需要注意的问题是res二维向量的初始化问题,根据题目的情景设计。