https://leetcode.com/problems/groups-of-special-equivalent-strings/html
You are given an array A
of strings.前端
Two strings S
and T
are special-equivalent if after any number of moves, S == T.ios
A move consists of choosing two indices i
and j
with i % 2 == j % 2
, and swapping S[i]
with S[j]
.程序员
Now, a group of special-equivalent strings from A is a non-empty subset S of A
such that any string not in S is not special-equivalent with any string in S.算法
Return the number of groups of special-equivalent strings from A
.docker
Example 1:数据库
Input: ["a","b","c","a","c","c"] Output: 3 Explanation: 3 groups ["a","a"], ["b"], ["c","c","c"]
Example 2:编程
Input: ["aa","bb","ab","ba"] Output: 4 Explanation: 4 groups ["aa"], ["bb"], ["ab"], ["ba"]
Example 3:api
Input: ["abc","acb","bac","bca","cab","cba"] Output: 3 Explanation: 3 groups ["abc","cba"], ["acb","bca"], ["bac","cab"]
Example 4:安全
Input: ["abcd","cdab","adcb","cbad"] Output: 1 Explanation: 1 group ["abcd","cdab","adcb","cbad"]
Note:
1 <= A.length <= 1000
1 <= A[i].length <= 20
A[i]
have the same length.A[i]
consist of only lowercase letters.统计奇数位和偶数位的个字符出现的次数,若是 S0
串和 S1
串统计的结果相同,则它们是 special-equivalent 的。
符合上面两个条件的是一组。
参考:https://blog.csdn.net/g_r_c/article/details/82079678
unordered_set使用方法
.find() 返回一个迭代器。这个迭代器指向和参数哈希值匹配的元素,若是没有匹配的元素,会返回这个容器的结束迭代器。 .end() 返回指向容器末尾位置的迭代器 .insert() 插入元素
视频:
https://www.youtube.com/watch?v=WJ4NtyrakT0&feature=youtu.be
图片示例:
C++实现代码:
#include "pch.h" #include <iostream> #include <string> #include <vector> #include <unordered_set> #include <algorithm> using std::vector; using std::string; using std::unordered_set; class Solution { public: int numSpecialEquivGroups(vector<string>& A) { unordered_set<string> st; for (int i = 0; i < A.size(); ++i) { string odd = ""; string even = ""; for (int j = 0; j < A[i].size(); ++j) { // 奇偶位的值 if (j % 2 == 0) odd += A[i][j]; else even += A[i][j]; } // 排序奇偶位的值 sort(odd.begin(), odd.end()); sort(even.begin(), even.end()); st.insert(odd + even); } return st.size(); } }; int main() { Solution solution; vector<string> A1 = { "abcd", "cdab", "adcb", "cbad" }; vector<string> A2 = { "abc", "acb", "bac", "bca", "cab", "cba" }; int res1 = solution.numSpecialEquivGroups(A1); int res2 = solution.numSpecialEquivGroups(A2); }
Python实现:
def numSpecialEquivGroups(self,A): s = set() for w in A: even = ''.join(sorted(w[0::2])) odd = ''.join(sorted(w[1::2])) s.add(odd+even) return len(s)
https://medium.com/@riccardo.ancarani94/attacking-docker-exposed-api-3e01ffc3c124
攻击开放在互联网的Docker API
Docker API外放有什么危害?
【漏洞挖掘】攻击对外开放的Docker API接口
https://www.cnblogs.com/17bdw/p/10302045.html
在这篇文章中,研究了Docker相关的威胁。让Docker API暴露于互联网可能会致使数据丢失,加密,僵尸网络等问题
应急响应查找未知远控木马。
未知远控进程过多,手动排查效率过低。
经过监控DNS请求,查找进程内存中的恶意C2,定位到进程
核心扫描功能经过Yara实现
入门程序员
编程技巧方面 编程语言方面 操做系统 网络协议 数据库设计 前端方面 字符编码方面
一、Java 是全部语言里面综合实力最强的。 二、只有像 C、C++ 和 Java 这样的静态语言才可让你真正地进阶。 三、对于一个合格的程序员,掌握几门语言是很是正常的事情。一方面,这会让你对不一样的语言进行比较,让你有更多的思考。另外一方面,这也是一种学习能力的培养,会让你对于将来的新技术学习得更快。
编程的 IDE 版本管理工具 调试前端程序 数据库设计工具
极客时间-左耳听风-程序员练级攻略-正式入门
https://www.cnblogs.com/17bdw/p/10303352.html
正式入门