leetcode 26
Remove Duplicates from Sorted Array
思路:去除有序数组中的重复点,返回新数组长度,前n个就是新数组。难点是不能用额外空间int removeDuplicates(vector<int>& nums) {
int count = 0;
for(int i=0;i<nums.size();i++)
{
if(i==0||nums[i]!=nums[i-1])
{
nums[count] = nums[i];
count++;
}
}
return count;
}
解题:重新填入整个数组,如果是0或者与前一个值不一样,就直接填入覆盖,直到遍历完整个有序数组。
TC = O(n), SC = O(1)
今天还完成了Thesis Writting
Collacation 密码:8qjh
以及DJI PPT 密码:awzd
leetcode 242 Valid Anagram
题目:判断两个字符串是否为同字母异序
思路:1.将字符串转成数组,排序然后比对得到结果
2.计算两个字符串里面的字母的Occurence,用一个26大小的counter数组统计字母出现的次数,当第一个串出现就++,第二个出现就–;最后得到的counter如果全为0,则符合;否则不符合。
bool isAnagram(string s, string t) {
if(s.length()!=t.length())
return false;
vector<int> counter;
for(int i=0;i<26;i++)
{
counter.push_back(0);
}
for(int i=0;i<s.length();i++)
{
counter[s[i] - 'a']++;
counter[t[i] - 'a']--;
}
for(int i=0;i<26;i++)
{
if(counter[i]!=0)
return false;
}
return true;
}
3.或者先对第一个串加完,然后第二个串减counter,如果其中一个元素小于0,则不符合。不能说一定等于0,因为后面可能会继续减的。
c++ string用法
1.头文件 #include
2.构造 string(const char s) //c string initialize
string(int n,char c)
string s = “hello”;
3.字符操作 const char &operator const
int copy(char s,int n, int pos=2) const;
4.特性 int length() const;
bool empty() const;
void resize(int len,char c); //不足部分用c填充
5.赋值 = , assign(const char c)
6.连接 +=, string append(const string&s);
7.比较 ==, int compare(const string &s);
8.子串 string substr(int pos=0,int n=npos) const;
9.交换 void swap(string &s2);
10.查找函数 int find(char c,int pos=0) const; //从pos开始找c
int find(const string &s,int pos=0) const; //从pos找s
11.替换 string &replace(int p0,int n0,const char
s);//删除p0开始n0个字符,在p0后插入串s
12.插入删除 insert erase