POJ1035&&POJ3080&&POJ1936

本文介绍了三种字符串处理问题的解决方法:查找字典中的相似词、寻找最长公共子串及判断子序列。通过具体代码实例展示了如何使用C++进行实现。

字符串处理专题,很早就写好了然而忘记写blog了

1035

题意:给你一些单词作为字典。然后让你查找一些单词。对于每个单词,如果在字典中就输出它。否则输出所有它通过删除||增加||替换一个字符能得到的单词

由于数据范围很小,所以我们直接暴力跑一下即可

CODE

#include<string>
#include<iostream>
#include<map>
using namespace std;
const int N=10005;
map <string,bool> hash;
string s[N],t;
int n,m;
inline void swap(string &a,string &b)
{
    string temp=a; a=b; b=temp;
}
inline bool cmp(string a,string b)
{
    int len_a=a.size(),len_b=b.size();
    if (len_a<len_b) swap(a,b),len_a=a.size(),len_b=b.size();
    if (len_a-len_b>1) return 0;
    if (len_a^len_b)
    {
        for (register int i=0;i<len_a;++i)
        {
            string temp=a;
            temp.erase(i,1);
            if (temp==b) return 1;
        }
        return 0;
    } else
    {
        int tot=0;
        for (register int i=0;i<len_a;++i)
        {
            if (tot>1) return 0;
            if (a[i]^b[i]) ++tot;
        }
        return tot<=1;
    }
}
int main()
{
    register int i;
    std::ios::sync_with_stdio(false);
    //freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
    while (cin>>s[++n],s[n]!="#")
    hash[s[n]]=1; --n;
    while (cin>>t,t!="#")
    {
        if (hash[t]) cout<<t<<" is correct"<<endl; else
        {
            cout<<t<<":";
            for (i=1;i<=n;++i)
            if (cmp(s[i],t)) cout<<" "<<s[i];
            cout<<endl;
        }
    }
    return 0;
}

3080

题意是给你一些字符串,让你找它们的最长公共字串

同样因为范围很小,所以只需要枚举+find即可

CODE

#include<iostream>
#include<string>
using namespace std;
string s[15],ans;
int n,m,len,tot;
int main()
{
    register int i,j,k;
    ios::sync_with_stdio(false); 
    cin>>n;
    while(n--)
    {
        cin>>m; tot=0; ans="";
        for (i=1;i<=m;++i)
        cin>>s[i]; len=s[1].size();
        for (i=0;i<len;++i)
        for (j=len-1;j>=i+tot-1;--j)
        {
            string temp(s[1],i,j-i+1);
            bool flag=1;
            for (k=2;k<=m;++k)
            if (s[k].find(temp)==string::npos) { flag=0; break; }
            if (flag) 
            {
                if (temp.size()>tot) tot=temp.size(),ans=temp; else
                if (temp.size()==tot&&temp<=ans) ans=temp;
            }
        }
        if (ans.size()<3) cout<<"no significant commonalities"<<endl; else cout<<ans<<endl;
    }
    return 0;
}

1936

题意:对于两个字符串,判断s1是否为s2的一个子序列

注意这里是子序列,所以不能上find,手动模拟一个一个查找即可

CODE

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s1[100005],s2[100005];
int len1,len2,p;
int main()
{
    register int i;
    while (scanf("%s%s",&s1,&s2)!=EOF) 
    {
        len1=strlen(s1); len2=strlen(s2); p=0;
        bool flag=1;
        for (i=0;i<len1;++i)
        {
            while (s2[p]!=s1[i]&&p<len2) ++p; ++p;
            if (p>len2) { flag=0; break; }
        }
        puts(flag?"Yes":"No");
    }
    return 0;
}

转载于:https://www.cnblogs.com/cjjsb/p/8832028.html

在车辆工程中,悬架系统的性能评估和优化一直是研究的热点。悬架不仅关乎车辆的乘坐舒适性,还直接影响到车辆的操控性和稳定性。为了深入理解悬架的动态行为,研究人员经常使用“二自由度悬架模型”来简化分析,并运用“传递函数”这一数学工具来描述悬架系统的动态特性。 二自由度悬架模型将复杂的车辆系统简化为两个独立的部分:车轮和车身。这种简化模型能够较准确地模拟出车辆在垂直方向上的运动行为,同时忽略了侧向和纵向的动态影响,这使得工程师能够更加专注于分析与优化与垂直动态相关的性能指标。 传递函数作为控制系统理论中的一种工具,能够描述系统输入和输出之间的关系。在悬架系统中,传递函数特别重要,因为它能够反映出路面不平度如何被悬架系统转化为车内乘员感受到的振动。通过传递函数,我们可以得到一个频率域上的表达式,从中分析出悬架系统的关键动态特性,如系统的振幅衰减特性和共振频率等。 在实际应用中,工程师通过使用MATLAB这类数学软件,建立双质量悬架的数学模型。模型中的参数包括车轮质量、车身质量、弹簧刚度以及阻尼系数等。通过编程求解,工程师可以得到悬架系统的传递函数,并据此绘制出传递函数曲线。这为评估悬架性能提供了一个直观的工具,使工程师能够了解悬架在不同频率激励下的响应情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值