京东2019春招Java工程师编程题题解
生成回文串
题目描述
对于一个字符串,从前开始读和从后开始读是一样的,我们就称这个字符串是回文串。
例如"ABCBA","AA","A"是回文串,而"ABCD","AAB"不是回文串。
牛牛特别喜欢回文串,他手中有一个字符串s,牛牛在思考能否从字符串中移除部分(0个或多个)字符使其变为回文串,并且牛牛认 为空串不是回文串。
牛牛发现移除的方案可能有很多种,希望你来帮他计算一下一共有多少种移除方案可以使s变为回文串,对于两种移除方案如果移除的字符依次构成的序列不一样就是不同的方法。
输入描述
输入包括一个字符串s(1 <= iength(s) <= 50),s中只包含大写字母。
输出描述
对于每个测试用例,输出一个正整数表示方案数。
思路
dp[l][r]表示区间 [l, r] 内的回文串数目。于是dp[l][r] = dp[l][r - 1] + dp[l + 1][r],根据s[l] 是否等于 s[r], 来看是+1还是减掉重复的部分。
代码实现
package jingdong.demo1;
import java.util.Scanner;
/**
* 生成回文串
*/
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int len = s.length();
int[][] dp = new int[len + 1][len + 1];
for (int i = 0; i <= len; i++)
dp[i][i] = 1;
for (int i = 2; i <= len; i++) {
for (int l = 1; l <= len - i + 1; l++) {
int r = l + i - 1;
dp[l][r] += dp[l + 1][r];
dp[l][r] += dp[l][r - 1];
if (s.charAt(l - 1) == s.charAt(r - 1))
dp[l][r] += 1;
else
dp[l][r] -= dp[l + 1][r - 1];
}
}
System.out.println(dp[1][len]);
}
}
整数分解
题目描述
小Q的数学老师给了小Q一个整数N,问小Q能否将W分解为两个整数X和Y相乘,并且满足X为奇数,Y为偶数,即能否找到奇数X和偶数Y满足X * Y = N,小Q被这个问题难住了,希望能你来帮助他计算。
输入描述:
输入的第一行包含一个正整数t( 1<= t <= 1000 ),表示测试样例数。接下来的t行,每行一个正整数N (2 <= N < 2^63),表示给出的N。保证不是2的幂次。
输出描述:
如果能找到这样的X,Y,则依次输出X,Y,如果有多解输出Y最小的那组解,以空格分割,否则输出"No"。
示例1
输入
2
10
5
输出
5 2
No
思路
先判断N是不是奇数,是的话直接返回No,然后Y从2开始,每次乘2,判断X是不是奇数。
代码实现
package jingdong.demo2;
import java.util.Scanner;
/**
* 整数分解
* 先判断N是不是奇数,是的话直接返回No
* 然后Y从2开始,每次加2,判断X是不是奇数
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
long[] arr = new long[t];
for (int i = 0; i < t; i++) {
arr[i] = sc.nextLong();
}
for (long N : arr) {
if (N % 2 != 0) {
System.out.println("No");
break;
}
long X;
long Y;
for (int i = 1; i <= N / 2; i++) {
Y = i * 2;
if (N % Y == 0) {
X = N / Y;
if (X % 2 != 0) {
System.out.println(X + " " + Y);
break;
}
}
}
}
}
}
牛牛的括号匹配
题目记不清了,和HDU 5831差不多。
思路
用一个计数量 cnt 统计左括号数量就行,匹配到右括号,就另 cnt--,如果 cnt < 0 就认为不匹配。其次,如果左括号数不等于右括号数,可以直接认为不匹配,不进行计算。
代码实现
package jingdong.demo3;
import java.util.*;
/**
* 牛牛的括号匹配
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
while (N-- > 0) {
String s = in.next();
char[] chars = s.toCharArray();
System.out.println(check(chars) ? "Yes" : "No");
}
}
private static boolean check(char[] chars) {
int lCnt = 0, rCnt = 0;
for (char c : chars) {
if (c == '(') lCnt++;
else rCnt++;
}
if (lCnt != rCnt) return false;
for (int i = 1; i < chars.length; i++) {
for (int j = 0; j < i; j++) {
swap(chars, i, j);
if (isPalindrome(chars)) return true;
swap(chars, i, j);
}
}
return false;
}
private static boolean isPalindrome(char[] chars) {
int cnt = 0;
for (char c : chars) {
if (c == '(') cnt++;
else {
if (cnt <= 0) return false;
cnt--;
}
}
return cnt == 0;
}
private static void swap(char[] chars, int i, int j) {
char t = chars[i];
chars[i] = chars[j];
chars[j] = t;
}
}
京东2019春招Java工程师编程题题解的更多相关文章
- 链家2018春招Java工程师编程题题解
Light 题目描述 在小红家里面,有n组开关,触摸每个开关,可以使得一组灯泡点亮.现在问你,使用这n组开关,最多能够使得多少个灯泡点亮呢? 输入 第一行一个n,表示有n组开关.接下来n行,每行第一个 ...
- 爱奇艺2018春招Java工程师编程题题解
字典序最大子序列 题目描述 对于字符串a和b,如果移除字符串a中的一些字母(可以全部移除,也可以一个都不移除)就能够得到字符串b我们就称b是a的子序列. 例如."heo"是&quo ...
- 2019秋招Java面经(未完待续)
2019秋招Java面经(凭记忆回忆, 可能不准) 随着我们从大三升到大四...秋招也开始了. 秋招进行的还比较顺利, 刚开始没几天, 我的秋招就结束了. 到现在我玩了差不多十多天了, 总想着总结一下 ...
- 2019春招——Vivo大数据开发工程师面经
Vvio总共就一轮技术面+一轮HR面,技术面总体而言,比较宽泛,比较看中基础,面试的全程没有涉及简历上的东西(都准备好跟他扯项目了,感觉是抽取的题库...)具体内容如下: 1.熟悉Hadoop哪些组件 ...
- 2016网易春招Java在线笔试回忆录
别看是在线笔试,但是非常严格,全称窗口不得最小化和关闭,转移,全称需要打开摄像头监控,使用草稿纸需要摄像头对准……反正2个小时,题量在那儿摆着,有作弊的功夫不如好好做做最后的编程题呢……网易不让泄漏原 ...
- Java Socket编程题库
一. 填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...
- java多线程编程题之连续打印abc的几种解法
一道编程题如下: 实例化三个线程,一个线程打印a,一个打印b,一个打印c,三个线程同时执行,要求打印出6个连着的abc 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程分别会打印6 ...
- 算法工程师<编程题>
<编程题> 1.[Maximum Product Subarray 求最大子数组乘积] 这个求最大子数组乘积问题是由最大子数组之和问题演变而来,但是却比求最大子数组之和要复杂,因为在求和的 ...
- 汤姆大叔的6道javascript编程题题解
看汤姆大叔的博文,其中有篇(猛戳这里)的最后有6道编程题,于是我也试试,大家都可以先试试. 1.找出数字数组中最大的元素(使用Math.max函数) var a = [1, 2, 3, 6, 5, 4 ...
随机推荐
- 基于Avocado 的 QData MySQL自动化测试.md
qdata-mysql 自动化测试概要设计 │ ├── 1. 依赖环境 │ │ ├ │ │ └───── │ ├── 2. 配置文件 │ │ ├ │ │ └── ...
- Intellij IDEA查看所有断点
项目中打的断点太多,有时自己也想不到打在哪里了,也不知道哪些方法.哪些代码行上打了断点,在IDEA中如何查看所有断点呢? 方法如下: step 1 IDEA的debug面板中有一个名称为View Br ...
- Linux中安装字体
Linux中安装字体 查看系统中的字体 fc-list 查看系统中的中文字体 fc-list :lang=zh将然后将字体文件拷贝到/usr/share/fonts/中 cp aa.ttl /usr/ ...
- cxGrid_Q31584 cxgrid 拖放移动记录
cxgrid 拖放移动记录,cxgrid 拖放,cxgrid 拖动记录,cxgrid 鼠标拖动记录 这是cxgrid开发公司回复客户时所发送的源码项目,用于实现鼠标拖动记录,改变记录在表格中的位置,所 ...
- C语言第六次作业--数据类型
一.PTA实验作业 题目1,简单计算器: 1. 本题PTA提交列表 2. 设计思路 定义操作数num1,num2,结果result=0.运算符ch. 输入num1 while (ch=getchar( ...
- CSS(CSS3)选择器(2)
该部分主要为CSS3新增的选择器 接上一篇 CSS(CSS3)选择器(1) 一.通用兄弟选择器: 24:E ~ F,匹配任何E元素之后的同级F元素. div ~ p{ background-color ...
- Object.prototype.hasOwnProperty与Object.getOwnPropertyNames
Object.prototype.hasOwnProperty() 所有继承了 Object 的对象都会继承到 hasOwnProperty 方法.这个方法可以用来检测一个对象是否含有特定的自身属性: ...
- SpringBoot快速开发REST服务最佳实践
一.为什么选择SpringBoot Spring Boot是由Pivotal团队提供的全新框架,被很多业内资深人士认为是可能改变游戏规则的新项目.早期我们搭建一个SSH或者Spring Web应用,需 ...
- Redis进阶实践之十九 Redis如何使用lua脚本
一.引言 redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入 ...
- [poj3461]Oulipo_KMP
Oulipo poj-3461 题目大意:给你两个字符串s和p,问s中有多少个等于p的子串. 注释:$1\le strlen(p)\le 10^4\qquad1\le strlen(s)\le 10^ ...