【leetcode】Anagrams

Anagrams

Given an array of strings, return all groups of strings that are anagrams.

Note: All inputs will be in lower-case.

Anagrams:即字母个数和字母都相同,但是字母顺序不相同的词

e.g. "tea","and","ate","eat","dan".   return "and","dan","tea","ate","eat"

即找出vector中所有存在Anagrams的词

思路:

对每一个string中的字符进行重新排序,保存在map中

如果重复找到了某个元素,则说明该词是Anagrams的,把当前元素,和与之匹配的Anagrams元素保存到vector中

注意sort的使用

如果比较的元素可以用<号比较,则无需第三个参数,按照升序排列

如果比较的元素不可以用<号比较,则需要第三个参数比较函数

比较函数可以写成下面的形式:

static bool less_lower(char c1, char c2)

{

return c1<c2;

}

注意,对于compare函数,两个元素相等时,需要返回false,否则会报错

 1 class Solution {
 2 public:
 3     vector<string> anagrams(vector<string> &strs) {
 4         int n=strs.size();
 5         string s;
 6         map<string ,int> strMap;
 7         vector<string> result;
 8
 9         for(int i=0;i<n;i++)
10         {
11             s=strs[i];
12             sort(s.begin(),s.end());
13             if(strMap.find(s)==strMap.end())
14             {
15                 strMap[s]=i;
16             }
17             else
18             {
19                 if(strMap[s]!=-1)
20                 {
21                     result.push_back(strs[strMap[s]]);
22                     strMap[s]=-1;
23                 }
24                 result.push_back(strs[i]);
25             }
26         }
27         return result;
28     }
29 };
时间: 2024-10-29 19:11:09

【leetcode】Anagrams的相关文章

【LeetCode】Anagrams 解题报告

[题目] Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be in lower-case. [解析] 题意:给定一个字符串数组,返回所有是"换位词"的字符串. 所谓"换位词/变位词"就是包含相同字母,但字母顺序可能不同的字符串.比如"abc", "bca", "cab&q

【leetcode】Anagrams (middle)

Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be in lower-case. anagrams 的意思是两个词用相同的字母组成  比如 “dog" "god" 思路: 把单词排序 如 dog 按字母排序变为 dgo 用unordered_map<string, int> 记录排序后序列第一次出现时,字符串在输入st

【leetcode】Generate Parentheses

题目: 给定整数n,返回n对匹配的小括号字符串数组. For example, given n = 3, a solution set is: "((()))", "(()())", "(())()", "()(())", "()()()" 分析: 这种问题的模式是:1)问题的解有多个 ,2)每个解都是由多个有效的 "步骤" 组成的,3)变更以有解的某个或某些"步骤"

【LeetCode】Implement strStr()

Implement strStr() Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack. 标准KMP算法.可参考下文. http://blog.csdn.net/yaochunnian/article/details/7059486 核心思想在于求出模式串前缀与后缀中重复部分,将重复信息保存在n

【LeetCode】Add Two Numbers

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 -> 3) + (5 -> 6 ->

【LeetCode】Pascal&#39;s Triangle

Pascal's Triangle Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Return [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 这题别想用通项公式做,n choose m里面的连乘必然溢出,老老实实逐层用定义做. class Solution { public: vector<vector<

【LeetCode】Copy List with Random Pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 思路:第一遍正常复制链表,同时用哈希表保存链表中原始节点和新节点的对应关系,第二遍遍历链表的时候,再复制随机域. 这是一种典型的空间换时间的做法,n个节点,需要大小为O(n

【leetcode】Max Points on a Line (python)

给定一个点,除该点之外的其他所有点中,与该点的关系要么是共线,要么就是共点,也就是两点重合. 共线有三种情况:水平共线,垂直共线,倾斜的共线.合并下这三种情况就是斜率存在的共线和斜率不存在的共线. 那么我们的任务就是针对每个点,找出与其共线的这些情况中,共线最多的点的个数. 注意:最终的结果别忘了加上共点的个数. class Solution: def maxPoints(self, points ): if len( points ) <= 1: return len( points ) ma

【LeetCode】 Maximum Subarray

Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [−2,1,−3,4,−1,2,1,−5,4], the contiguous subarray [4,−1,2,1] has the largest sum = 6. More practice: If you have figu