一.调试运行部分
1.类内函数需要实例化对象才能在类外中主函数访问
class Solution;
bool isAnagram(string, string);
class Solution {
public:
bool isAnagram(string s, string t) {
int hash[26] = { 0 };
int s_size = s.length();
int t_size = t.length();
for (int i = 0; i < s_size; i++)
{
hash[s[i] - 'a']++;
}
for (int j = 0; j < t_size; j++)
{
hash[t[j] - 'a']--;
}
for (int i = 0; i < 26; i++)
{
if (hash[i] != 0)return 0;
}
return 1;
}
};
int main() {
string s = "rat";
string t = "cat";
Solution solution;//若缺少这行会报错
int res = solution.isAnagram(s, t);
printf("%d", res);
return 0;
}
二.基础数据结构部分
1.string
string
类似C语言中的数组,只是声明操作起来更方便,需要引入iostream
头文件
string s0="hello";
string s1="world!";
string s=s0+s1;
printf("%s",s.c_str());
结果是
"helloworld!"
不会补充空格,可以更方便的实现字符串的拼接,用printf
打印时需要用c_str
方法将string
类型转换成const char*
类型,才可打印
string s2;
scanf("%s",s2.c_str());
cin >> s2;
getline(cin,s2);
printf("%s",s2.c_str());
string
类型在接收字符串时,可用scanf
(也需要用c_str
转换类型)和cin
,但是遇到空格就会停止读取,而getline
函数可读取整行的输入内容,不会被空格打断
string s2;
scanf("%s",s2.c_str());
cin >> s2;
getline(cin,s2);
printf("%s",s2.c_str());
lenth
函数可测量字符串长度,substr
有两种用法,一个参数与两个参数,上函数运行结果为
2.set(unordered_set,multiset)
set
是哈希表的常用数据结构,使用需要引入头文件set
,其中定义与数组vector相似,因为集合中的元素不重复且个数不定,所以初始化时候后面不加任何参数,insert
是向集合中添加元素,set
会自动去掉重复的元素并将集合内的元素从小到大排好序
set <int> s;
s.insert(1);
关于set,C++ 给提供了如下三种可用的数据结构:
- set:对内部元素从小到大排序,不可重复
- multiset:对内部元素从小到大排序,可重复
- unordered_set:读写效率最高,内部元素无序,不可重复
作哈希表用查找集合中有无所需元素时需要用到
find
函数,它的返回值是一个bool
类型,其中s.find(2)
的含义是从集合的开始找 2 这个元素一直找到末尾,这个值是一个指针类型,s.end()
是集合最后一个元素的下一个位置,如果集合中不存在 2 这个元素,指针最后就会移动到这个位置,也就会与s.end()
相等了
s.erase
是删除集合中元素的函数
if(s.find(2)!=s.end())
printf("in");
else
printf("not in");
s.erase(1);
用set
初始化vector
和用vector
初始化set
unordered_set<int> s(nums1.begin(), nums1.end());
//用vector初始化set
vector<int>(res.begin(), res.end());
//用set初始化vector
3.map(unordered_map,multimap)
map
是哈希表常用的数据结构,使用需要引入头文件map
,定义map名字后面无任何参数,格式为map<key,value> m
,会按照键的从小到大排序
添加元素有几种常用的方式
unordered_map<string, int> m;
m["hello"]=2;//添加一个key=“hello”,value=2的键值对
m.insert({{"hello",2}});
m.insert(pair<string,int>("hello",2));
查找方式与
set
类似,都是find
函数,其查找的参数是key
m.find("hello")!=m.end()//值为1,就是找到了"hello"