您的位置:首页 > 职场人生

京东2018校招研发笔试题记录

2017-09-09 18:46 357 查看

背景

这几天正好是各大互联网公司校招笔试的时间,于是陪着同学一起做了一下京东的笔试题。其中单选和不定项选择题涵盖的范围还是比较广的,包括子网掩码的计算、linux相关知识点、C++知识点、设计模式等。编程题有两道,其实难度不大,现在将第一题以及我的答案记录一下供大家参考。

题目描述:

给定一个字符串s,请计算输出含有连续两个s作为子串的最短字符串。注意两个s可能有重叠部分。例如,”ababa”含有两个aba。

输入描述:

输入包括一个字符串s,字符串长度length(1<length1<50),s中每个字符都是小写字母。

输出描述:

输出一个字符串,即含有连续两个s作为子串的最短字符串。

输入:

abracadabra

输出:

abracadabracadabra

思路:

题目中说是包含两个s作为子串,而且可以有重叠部分。所以说,如果没有重叠的部分,最后输出的便是最长的字符串,即两个s拼接在一起。如果有重叠部分,也是仅限于s的前n位和s的后n位是一样的才可以。因此,我们可以用最简单的方式,把两个s当成s1和s2。从s1的第2(n)位往后开始和s2的第一位往后的每一个字符进行对比,如果直到s1的结尾都是一致的,则最后输出的字符便是s1的前1(n-1)个字符拼接s2。如果有不一致的,则从s1的第3(n+1)位开始重复比对,以此类推。

代码实现:

public class JDTest {
public static void main(String[] args) {
Scanner ss = new Scanner(System.in);
String s = ss.next();
System.out.println(getString(s));
}
public static String getString(String s) {
char[] charArray = s.toCharArray();//将字符串s转为char数组
for (int i = 1; i < charArray.length; i++) {
//每次从s1的第i位与s2的第0位开始比较
int j = 0;
int tempi = i;
//如果相等则继续比较s1和s2的下一位字符
while (charArray[j] == charArray[tempi]) {
//如果到了s1的最后一位都是相等的,则返回最短字符串
if (tempi == charArray.length - 1) {
String result1 = s.substring(0, i);
return result1 + s;
}
j++;
tempi++;
}
}
//如果没有重复,则返回两个s拼接的字符串
return s + s;
}
}


当然,如果有更好的解决方法,希望各位读者可以补充交流。

最后庆祝我的独立域名博客正式上线啦

本篇文章也会在我的独立域名博客异思园同步发布,当然,在那个博客上也会发布一些和技术无关的瞎扯胡扯的文章啦,毕竟在CSDN博客上,还是主要写一些技术性的文章嘛(严肃脸)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  京东 面试题 校招