ok, 第一次参加leetcode的双周赛。
我都是用c++写的。
主要是用来记录和总结自己做过的每一道leetcode题目。
一个菜鸡的游记过程。
题目:
如果一个字符串不含有任何重复字符,我们称这个字符串为 好 字符串。
给你一个字符串 s ,请你返回 s 中长度为 3 的 好子字符串 的数量。
注意,如果相同的好子字符串出现多次,每一次都应该被记入答案之中。
子字符串 是一个字符串中连续的字符序列。
题目链接:https://leetcode-cn.com/problems/substrings-of-size-three-with-distinct-characters/
首先,定位这道题目是一个字符串的题目。
类似滑动窗口找子字符串的感觉。
那就一个一个滑过去
就循环呗。
再来个判断是不是好的子字符串。
然后记录。
开始写:
(我这是用的clion编译器 可以在本地调试leetcode代码,也是琢磨了一会儿查了一下的)
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
//可以的 是最简单的算法
class Solution {
public:
int countGoodSubstrings(string s) {
int num=0;
if(s.length()<3)
{
return 0;
}
for(int i=0;i<=s.length()-3;i++) //3 check
{
//如果子字符串不同,就加一
if(s[i]!=s[i+1]&&s[i+1]!=s[i+2]&&s[i]!=s[i+2])
{
num++;
}
//清除sub
//sub.clear();
}
return num;
}
};
int main() {
Solution s;
string st="aababcabc";
cout<<s.countGoodSubstrings(st);
return 0;
}
这就结束啦。
也通过了。
这道题,对我来说,
逻辑上面想解题过程不难,
细节处有一些要注意的,
实现上也有不那么熟练的地方(可以学习的地方)。
细节:
开始只写了s.length()-3,没有一开始的if判断语句,这样leetcode会报错,貌似是卡在循环上。我后来看了官方的解,官方是相当于把s.length先算出来赋给一个变量,if条件里面写的只是这个变量。后来我把我的代码也一样改了,能过,说明这个地方确实是要先计算出来,否则会出错,至于原因我还没有探究。
实现上来说,值得记笔记的地方:
字符串 s.length() 得到的是字符的个数。字符串string调用其中的字符,可以像数组一样使用。
over.