题解:直接暴力
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param k int整型
* @return string字符串
*/
string NS_String(string s, int k) {
// write code here
vector<int>a(26,0);
for(int i=0;i<s.length();i++)
{
a[s[i]-'a']++;
}
int num=0;
string s2="";
if(k==0) return s;
for(int i=0;i<k;i++){
while(a[num]==0&&num<26){
num++;
}
if(num>=26)
{
break;
}
s2="";
char c='a'+num;
for(int j=0;j<s.length();j++){
if(s[j]==c)
{
continue;
}
else{
s2.push_back(s[j]);
}
}
s="";
s.append(s2);
num++;
// if(s2.compare("")==0)
// {
// return "";
// }
}
return s2;
}
};
题解:1....n.....2
1...n......2
作为一整个的一个循环(2*n-2),然后对其进行处理。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @param m long长整型
* @return long长整型vector
*/
vector<long> FarmerNN(int n, long long m) {
// write code here
vector<long>res(n,0);
if(n==1){
res[0]=m;
return res;
}
long long x=m/(2*n-2);
int w=m%(2*n-2);
for(int i=0;i<n;i++)
{
if(i!=n-1 && i!=0)
res[i]=2*x;
else{
res[i]=x;
}
}
int num=0;
int id=0;
for(int i=0;i<w;i++){
if(num<n && id==0)
{
res[num]++;
num++;
}
else if(num<n)
{
res[num]++;
num--;
}
else{
id=1;
num=n-2;
res[num]++;
num--;
}
}
return res;
}
};
题解:滑动窗口+哈希,代码有些不易理解,中间需要自己考虑一下;
比如 x1 x2 y2 y1(这里假x1^y1=t,x2^y2=t)
当r处于y1位置时,此时l处于y2这个位置
class Solution {
public:
long long section(vector<int>& a, int t) {
unordered_map<int,int> mp;
long long res=0;
int l=0;
int r=0;
while(r<a.size()){
if(mp.count(a[r]^t)>0){
l=max(l,mp.at(a[r]^t)+1);
}
res+=(r-l);
mp[a[r]]=r;
r++;
}
return res;
}
};
题解:首先使用hashmap标记上具有相同子节点的节点,然后对具有相同节点的节点进行暴力比较是否结构相同,还利用了map的建的有序性,我们使用rbegin和rend使得其键值从大 到小排序,这样的话,我们第一次遇到了相同的同构子树,即是所求最大同构子树)
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
map<int,vector<TreeNode*>>mp;
int count(TreeNode* root){
if(root==nullptr) return 0;
int m=1+count(root->left)+count(root->right);
mp[m].push_back(root);
return m;
}
bool com(TreeNode* root1,TreeNode* root2){
if(root1==nullptr && root2==nullptr) return true;
else if(root1!=nullptr && root2!=nullptr) return com(root1->left,root2->left)&&com(root1->right,root2->right);
else return false;
}
// map<int, vector<TreeNode*>> omap;
int res=0;
int maxSubTree(TreeNode* root) {
if(root==nullptr) return 0;
count(root);//计算每个节点的子节点数目;
auto s=mp.rbegin();
// cout<<s->first;
while(s!=mp.rend()){
vector<TreeNode*> node=s->second;
for(int i=0;i<node.size();i++){
for(int j=i+1;j<node.size();j++)
{
if(com(node[i],node[j]))
{
return s->first;
// res=max(res,s->first);
}
}
}
s++;
}
return 0;
}
};