zoukankan      html  css  js  c++  java
  • HDU1238

    知识点

    首先补一下知识点。

    字串和子序列

    子串:连续的字符组成的子序列 称为该串的子串。

    子序列:相对位置不变形成新序列。


    substr函数

    string需要赋值给的字符串名称=字符串string名称.substr(x,y)。

    从下标为x的字符(包括x)开始,截取/出长度为y的字符串。

    例如:

    string s="123456789";
    string ss=s.substr(0,3);
    cout<<ss<<endl; //输出123
    

    find函数
    find函数的返回值是无符号整型,如果查找不到 就会返回4294967295( string::npos 表示 -1 或 4294967295 )

    例如:

    string s="123456789";
    if(s.find("456",0)!=string::npos)
        cout<<s.find("456",0)<<endl; // 输出 3
    if(s.find("654",0)==string::npos)
        cout<<"无法找到"<<endl; // 输出 无法找到
    

    reverse函数
    就是翻转字符串的函数。

    例如:

    string s="123456789";
    reverse(s.begin(),s.end());
    cout<<s<<endl; // 输出 987654321
    

    题意

    给出(T)组数据,每组数据给出(x)个字符串,

    要求从这些字符串中找出一个子串,

    该子串需要正序或者倒序在这(x)个字符串中都出现过,

    输出子串的最长长度。

    思路

    (我们需要用最短的代码去解决题目)
    用到上面说的三个函数就可以解决这个问题。

    AC代码

    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<stdio.h>
    #include<cmath>
    #include<list>
    #include<stdlib.h>
    #include<map>
    #include<vector>
    #include<stack>
    #include<string.h>
    #include<stdio.h>
    #include<queue>
    using namespace std;
    typedef long long ll;
    #define sc(T) scanf("%d",&T)
    #define scc(x,y) scanf("%d %d",&x,&y)
    #define pr(T) printf("%d
    ",T)
    #define f(a,b,c) for (int a=b;a<c;a++)
    #define ff(a,b,c) for (int a=b;a>c;a--)
    #define inf 0x3f3f3f3f
    #define mem(a,b) memset(a,b,sizeof(a))
    #define eps 1e-9
    #define PI acos(-1)
    
    string s[110];
    
    bool cmp1(string a,string b)
    {
        return a.length()<b.length();
    }
    
    int main()
    {
        int T,n;
        sc(T);
        while(T--)
        {
            sc(n);
            for(int i=0; i<n; i++)
                cin>>s[i];
            sort(s,s+n,cmp1);
            int ans=0,flag=0;
            for(int i=0; i<s[0].length(); i++)
            {
                for(int j=1; j<=s[0].length()-i; j++)
                {
                    string ss=s[0].substr(i,j);
                    flag=1;
                    for(int k=1; k<n; k++)
                    {
                        if(s[k].find(ss)==string::npos)
                        {
                            reverse(ss.begin(),ss.end());
                            if(s[k].find(ss)==string::npos)
                            {
                                flag=0;
                                break;
                            }
                        }
                    }
                    if(flag)
                        ans=max(ans,j);
                }
            }
            pr(ans);
        }
        return 0;
    }
    
  • 相关阅读:
    今天再积累一个很菜的问题,union union all
    MS SQL SERVER 2005全文索引
    转:xml的读写
    今天觉得自己太累了!
    几点Session使用的经验(sessionId)(转载)
    再积累又一个很菜的问题:页面间用get方式传汉字
    SQL SERVER 2000的全文检索功能
    今天觉得自己太菜了!!!!
    堆、栈、自由存储区、全局/静态存储区和常量存储区(转)
    fedora 系统使用 Broadcom BCM4312 无线网卡(转)
  • 原文地址:https://www.cnblogs.com/OFSHK/p/13719403.html
Copyright © 2011-2022 走看看