东方财富信息股份有限公司笔试编程题

本文介绍了如何使用Java解决编程题:判断一个字符串是否由两个其他字符串交叉构成。通过动态规划的方法,创建二维数组dp来表示字符串交叉组合的可能性,最后通过比较dp数组的最终状态来得出结论。

题目1:给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成(组合过程不能改变字符在s1,s2字符串中的原本顺序)。若是输出为TRUE,若不是则输出为FALSE。

例如:

第一种情况:Str1和Str2中的字符不同时,Str1=“abc”,Str2="defgh",若Str3=“abdefcgh”,输出为TRUE,若Str3=“abdecghf”,输出为FALSE。

第二种情况:Str1和Str2中的字符相同时,Str1=“aabcc”,Str2="dbbca",若Str3=“aadbbcbcac”,输出为TRUE,若Str3=“aadbbbaccc”,输出为FALSE。

解法思路

想法借鉴出处可以查看博文,链接为:https://blog.youkuaiyun.com/Hairy_Monsters/article/details/80492802

这属于动态规划问题的题目。刚拿到这个题的时候,其实是不知道怎么做的,一时也想不到怎么动规,找了些题解后,做一些分析如下所示:

大概思想如下:
1. 动态规划求解,构造一个长为 len2=s2.size()+1,宽为 len1=s1.size()+1 的 dp[][] 二维数组;
2. 设有 i,j,其中 i表示字符串 s1 的第 i 个字符, j 表示字符串 s2 的第 j 个字符, t=i+j 表示 s3 的第 t 个字符;
3. dp[i][j] 如果为 1 ,表示 s1[i] 等于 s3[t] 且 dp[i−1][j] 等于 1 、 或者 s2[j] 等于  s3[t] 且  dp[i][j−1] ;
4. 简单的说 dp[i][j] 为 1 就表示这个点可达,以 dp[0][0] 为起点, dp[len1][len2] 为终点,dp数组中值为 1 的点为路径,向下走表示取 s1 的字符,向右走表示取 s2 的字符。这样就将抽象的字符组合转化成了更好理解的二维数组来表示;
5. 最优子结构即为: s1,s2 的 i,j 点字符之前的字符能否交叉组合成字符串 s3 的前 i+j 个字符,转换到二维数组即为, i,j 点左侧点和上方的点是否可达。

相应Java代码为:
import java.util.Scanner;
import java.util.Vector;
public class Test_DongfangCaifu {
    static Boolean isInterleave(String str1,String str2,String str3){
        int len1 = str1.length();
        int len2 = str2.length();
        int len3 = str3.length();
        if(len3 != len1 +len2)
            return false;
        if(len1

### 关于烟台东方威思顿电器有限公司的笔试题目和技术方向 #### 公司背景与技术领域 烟台东方威思顿电器有限公司是一家专注于电力设备制造的企业,在智能电网、电能计量以及自动化控制等领域具有较强的技术实力。其产品涉及无线通信电能计量表等智能化设备,这些设备的应用显著提升了电力系统的管理效率和灵活性[^4]。 #### 笔试可能覆盖的主要考点 基于行业特点及相关企业的招聘趋势,以下是IT类型的笔试可能会考察的内容: 1. **编程基础** 编程能力通常是IT岗位的核心考核点之一。考生需熟练掌握至少一种主流编程语言(如C++、Python或Java),并具备解决实际问题的能力。 2. **数据结构与算法** 数据结构与算法的设计和优化是评估候选人逻辑思维能力和解决问题技巧的重要手段。常见考题包括但不限于链表操作、树遍历、图论基本概念及其应用等。 3. **数据库原理** 鉴于公司在数据分析方面的业务需求,熟悉关系型数据库管理系统(RDBMS)的操作至关重要。这包括SQL查询语句编写、索引机制理解以及事务处理原则等方面的知识点。 4. **网络协议分析** 由于涉及到无线通讯模块的研发工作,因此对TCP/IP模型各层功能的理解程度也是考量因素之一。此外还需关注特定应用场景下的传输质量保障措施等内容。 5. **嵌入式开发经验** 对于从事硬件相关工作的职位来说,则更加侧重考查应聘者关于单片机程序设计、RTOS环境搭建等方面的实践经验。 6. **操作系统基础知识** 掌握多线程同步方法、内存分配策略等相关理论有助于更好地完成项目任务。 7. **数学建模能力** 在某些特殊情况下也可能测试求职者的抽象概括水平——即能否利用已学过的数理工具构建合理的解决方案框架来应对复杂工程难题。 8. **专业知识问答** 结合企业主营业务范围内的具体案例场景提问,比如如何实现高效的数据采集?怎样保证信号传输过程中不丢失重要信息等问题。 #### 技术方向建议学习资源推荐 为了更充分地准备此类考试,可以从以下几个方面入手搜集资料进行自学: - 参阅经典教材《Introduction to Algorithms》第三版作为入门指南; - 利用LeetCode平台上的刷题模式强化练习各种难度级别的习题解答技能; - 学习官方文档或其他权威教程深入了解目标语言特性; - 如果时间允许的话还可以尝试参与开源社区贡献代码积累实战经历; 最后提醒各位同学注意保持良好作息规律以免过度疲劳影响发挥哦! ```python # 示例代码片段展示简单的快速排序函数实现方式供参考 def quicksort(array): if len(array) < 2: return array else: pivot = array[0] less = [i for i in array[1:] if i <= pivot] greater = [i for i in array[1:] if i > pivot] return quicksort(less) + [pivot] + quicksort(greater) print(quicksort([10, 5, 2, 3])) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值