这是关于一个普通双非本科大一学生的C++的学习记录贴
在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料
那么开启正题
为了巩固前面的知识,最近更新刷题贴,C++进度暂缓
. - 力扣(LeetCode)
由于还没学C++的字符串有些题的ac代码是用C语言写的
给定两个字符串s
和 t
,编写一个函数来判断 t
是否是 s
的字母异位词。
注意:若 s
和 t
中每个字符出现的次数都相同,则称 s
和 t
互为字母异位词
这个题创建一个初始化为0的数组,遍历两个字符串,一个对数组元素进行++,另一个对数组元素进行--,再遍历数组看数组内成员是否都为0即可
bool isAnagram(char* s, char* t)
{
int a[200] = {0};
while(*s != '\0')
{
++a[*s];
++s;
}
while(*t != '\0')
{
--a[*t];
++t;
}
int i=0;
for(i=0;i<200;i++)
{
if(a[i])
return false;
}
return true;
}
这是ac代码
. - 力扣(LeetCode)
给你一个偶数长度的字符串 s 。将其拆分成长度相同的两半,前一半为 a ,后一半为 b 。两个字符串相似的前提是 它们都含有相同数目的元音('a','e','i','o','u','A','E','I','O','U')。注意,s 可能同时含有大写和小写字 母。如果 a 和 b 相似,返回 true ;否则,返回 false 。
首先利用偶数长度字符串找到中间指针,两个指针一起“向前走”根据是否为元音字母对两个数字num1,num2进行++,最后比较两个数字是否相等即可
bool halvesAreAlike(char* s)
{
int len = strlen(s);
char* t = s + (len/2);
int num1 = 0,num2 = 0;
while(*t)
{
if(*s == 'a' || *s == 'e'||*s == 'i'||*s == 'o'||*s == 'u'||*s == 'A'||*s == 'E'||*s == 'I'||*s == 'O'||*s == 'U')
++num1;
if(*t == 'a' || *t == 'e'||*t == 'i'||*t == 'o'||*t == 'u'||*t == 'A'||*t == 'E'||*t == 'I'||*t == 'O'||*t == 'U')
++num2;
++t;
++s;
}
if(num1 == num2)
return true;
else
return false;
}
这是ac代码
. - 力扣(LeetCode)
如果两个字符串 word1 和 word2 中从 'a' 到 'z' 每一个字母出现频率之差都不超过 3 ,那么我们称这两个字符串 word1 和 word2 几乎相等 。给你两个长度都为 n 的字符串 word1 和 word2 ,如果 word1 和 word2 几乎相等,请 你返回 true ,否则返回 false 。一个字母 x 的出现频率指的是它在字符串中出现的次数
这个题和上面的题相似,都是利用数组进行操作检查是否符合题意,不在赘述
bool checkAlmostEquivalent(char* word1, char* word2)
{
int a[26] = {0};
while(*word1)
{
++a[*word1 - 'a'];
--a[*word2 - 'a'];
++word1;
++word2;
}
int i=0;
for(i=0;i<26;i++)
{
if(abs(a[i]) > 3)
return false;
}
return true;
}
这是ac代码
. - 力扣(LeetCode)
给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入
char* decodeString(char* s)
{
static char a[100];
int count = 0;
Stack st;
InitStack(&st);
while (*s)
{
if (*s != ']')
{
PushStack(&st, *s);
++s;
}
else
{
Stack kk;
InitStack(&kk);
while (TopStack(&st) != '[')
{
PushStack(&kk, TopStack(&st));
PopStack(&st);
}
PopStack(&st);
int num = TopStack(&st) - '0';
PopStack(&st);
int i = 0;
while (!StackEmpty(&kk))
{
i++;
a[count++] = TopStack(&kk);
PopStack(&kk);
}
while (--num)
{
int k = count - i;
strncpy(a + count, a + k, i);
count += i;
}
s++;
}
}
a[count] = '\0';
return a;
}
这里先放上不完全ac代码,这题有难度,得明天慢慢品了
今天的博客就到这里了,后续内容明天分享,最近因为考试周原因不能更新太多内容,等考试周结束了再"快马加鞭"
新手第一次写博客,有不对的位置希望大佬们能够指出,也谢谢大家能看到这里,让我们一起学习进步吧!!!