2 条题解

  • 0
    @ 2024-12-14 17:46:41

    感谢楼上题解,不过我认为可以不用转为int再放到数组里面,可以直接减去字符a后变为0-25然后再计算频率会更清楚一点,然后就是这个编辑器是markdown格式的,可以加代码块,不加代码块直接发出来会看的很头疼。总结:感谢楼上题解[花]

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int T;
        cin>>T;
        int Q;
        string s;
        for(int i=1; i<=T; i++)
        {
            cin>>s;
    //		s是要匹配的字符串
            cin>>Q;
            string zi;
            int len2 = s.size();
            for(int j=1; j<=Q; j++)
            {
                cin>>zi;
                int len = zi.size();
                int std[27]={0};
                for(int k=0; k<len; k++)
                {
                    std[zi[k] - 'a']++;
                }
                int ans=0;
                for(int k=0; k<len2 - len + 1; k++)
                {
                    int jd[27]={0};
                    string judge=s.substr(k,len);
                    for(int h=0; h<len; h++)
                    {
                        jd[judge[h] - 'a']++;
                    }
                    int flag = 1;
                    for (int h = 0; h <= 26; h ++)
                    {
                        if (jd[h] != std[h])
                        {
                            flag = 0;
                        }
                    }
                    if (flag == 1) ans++;
                }
                cout<<ans<<endl;
            }
        }
        return 0;
    }
    
    • 0
      @ 2024-11-9 12:46:46

      #include<bits/stdc++.h> using namespace std;

      int main() { int T;

      cin>>T;
      
      int Q;
      
      string s;
      
      for(int i=1; i<=T; i++)
      {
      	cin>>s;
      	
      	cin>>Q;
      	
      	string zi;
      	
      	
      	
      	for(int j=1; j<=Q; j++)
      	{
      		cin>>zi;
      		
      		int std[1024]={0}; //子串的标准 
      		
      		for(int k=0; k<zi.size(); k++)
      		{
      			std[(int)zi[k]]++;
      		}
      		
      		int ans=0; //一个Q对应一个ans 
      		
      		for(int k=0; k<s.size()-zi.size()+1; k++)
      		{
      			int jd[1024]={0};
      			
      			string judge=s.substr(k,zi.size());
      

      // cout<<"查找的子串是:"<<judge<<endl; // cout<<"子串的长度是:"<<zi.size()<<endl;

      			for(int h=0; h<zi.size(); h++)
      			{
      				jd[(int)judge[h]]++;
      			}
      			
      			int flag=1;
      			
      			for(int h=0; h<zi.size(); h++)
      			{
      

      // cout<<zi[h]<<':'<<"std:"<<std[(int)zi[h]]<<" VS "<<"jd:"<<jd[(int)zi[h]]<<endl;

      				if(std[(int)zi[h]]!=jd[(int)zi[h]])
      					flag=0;
      

      // cout<<"flag:"<<flag<<endl; }

      			if(flag==1)
      				ans++;
      		} 
      		
      		cout<<ans<<endl;
      		
      	}
      }
      
      return 0;
      

      }

      感觉我写的太丑陋了 抛砖引玉一下吧

      • 1

      信息

      ID
      196
      时间
      4000ms
      内存
      256MiB
      难度
      8
      标签
      递交数
      593
      已通过
      72
      上传者