Input: [“Hello”, “Alaska”, “Dad”, “Peace”]
Output: [“Alaska”, “Dad”]
题目要求:如果一个词语的字母来自同排,则输出
不学C++都不行啊,还是C++比较方便
class Solution {
public:
vector<string> findWords(vector<string>& words) {
std::unordered_set <char> row1={'q','w','e','r','t','y','u','i','o','p'};
std::unordered_set <char> row2={'a','s','d','f','g','h','j','k','l'};
std::unordered_set <char> row3={'z','x','c','v','b','n','m'};
vector<string> out;
for(auto &elem : words)
{
bool d1=true,d2=true,d3=true;
for(auto &key :elem)
{
if(d1)
{
auto re=row1.find(tolower(key));
if(re==row1.end())
d1=false;
}
if(d2)
{
auto re=row2.find(tolower(key));
if(re==row2.end())
d2=false;
}
if(d3)
{
auto re=row3.find(tolower(key));
if(re==row3.end())
d3=false;
}
}
if(d1||d2||d3)
out.push_back(elem);
}
return out;
}
1.vector用法
1.1使用前提:
#include<vector>
using namespace std;
1.2基本功能:C++中的一种数据结构和一种类,相当于动态数组。用于无法得知数组规模的情况。
vector<int> a;//一维数组
vector<vector<int>> a;//二维数组
vector<string> a;//(如题)连续的一个一个字符串
a.push_back(x);//在数组的最后添加一个数据x
a.pop_back();//去掉数组的最后一个数据
a.at(index);//得到编号index位置的数据
a.begin();//得到数组头的指针
a.end();//得到数组的最后一个单元+1的指针
a.front();//得到数组头的引用
a.back();//得到数组的最后一个单元的引用
a.max_size();//当前能申请到的大小
a.capacity();//当前vector分配的大小
a.size();//当前使用数据的大小
a.resize(num);//改变当前使用数据的大小
a.reserve(num);//强制容器把它的容量改为至少num,提供的num不小于当前大小。这一般强迫进行一次重新分配,因为容量需要增加
a.erase(iter);//删除指针指向的数据项,如下方法删除值为3的元素避免野指针
for(vector<int>::iterator iter=a.begin(); iter!=a.end();)
{
if( *iter == 3)
iter = a.erase(iter);
else
a ++ ;
}
a.clear;//空当前的vector
a.rbegin();//将vector反转后的开始指针返回(其实就是原来的end-1)
a.rend();//将vector反转构的结束指针返回(其实就是原来的begin-1)
a.empty();//判断vector是否为空,返回bool
a.swap(vector<int> b)//与vector<int> b交换数据
{
std::vector<int> tmp = a;
a.swap(tmp);
}或者vector<int>(a).swap(a);//加大括号了,tmp在结束时自动析构
2.iterator用法
2.1定义:每种容器类型都有自己的迭代器类型。例如vector::iterator iter;这条语句定义了一个名为iter的变量,它的数据类型是由vector定义的iterator类型。
2.2vector::const_iterator 和 const vector::iterator的区别,后者类型可以通过*iter=2等表达式修改值,前者不行。
2.3遍历一个vector
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
{
......
}
3.tolower用法:char tolower(char);
#include <stdlib.h>或者
#include <ctype.h>
4.unordered_set:无序集合容器(unordered_set)是一个存储无重复的关联容器,容器中的元素无特别的秩序关系,该容器允许基于值的快速元素检索,同时也支持正向迭代。 在一个unordered_set内部,元素不会按任何顺序排序,而是通过元素值的hash值将元素分组放置到各个槽(Bucker,也可以译为“桶”),这样就能通过元素值快速访问各个对应的元素(均摊耗时为O(1))
5.find用法:
#include <algorithm>
find(m.begin, m.end(), "hello")
//find(查找起始地址,查找结束地址的下一位地址,查找的字符串);
//返回找到的下标,找不到则返回m.end().
6.auto:从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,大大简化编程工作.
7.for的简单变量循环
for(auto &elem :words)
//for(元素类型 &给元素取的名字 :数组的名字)