- 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
输入
5 7
输出
35
while(line = readline()){
var arr = line.split(' ').map(function(item){
return parseInt(item);
});
var a = parseInt(arr[0]);
var b = parseInt(arr[1]);
var num = a * b;
while(a % b) {
var c = a % b;
a = b;
b = c;
}
console.log(num/b);
}
- 密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
输入描述:
一组或多组长度超过2的子符串。每组占一行
while(line=readline()){
console.log(check(line));
}
function check(str) {
if(str.length <= 8){
return "NG"
}
var count = 0;
var reg1 = /[A-Z]/;
var reg2 = /[a-z]/;
var reg3 = /[0-9]/;
if(reg1.test(str)){
count++;
}
if(reg2.test(str)){
count++;
}
if(reg3.test(str)){
count++;
}
if(count<2){
return 'NG';
}else if(count == 2 && line.replace(/[A-Za-z0-9]/g,' ').length == 0){
return 'NG';
}
for(var i=0;i<(line.length-3);i++){
var temp = line.substr(i,3);
//判断重复
if(line.lastIndexOf(temp)>i){
return 'NG';
}
}
return 'OK';
}
- 密码问题
手机按键上对应:1–1, abc–2, def–3, ghi–4, jkl–5, mno–6, pqrs–7, tuv–8 wxyz–9, 0–0,把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换,大写字母则变成小写字母后往后移一位,如:X,先变成小写,再往后移一位,就是y了嘛,注意,z往后移是a。
输入
YUANzhi1987
输出
zvbo9441987
function check(pw){
var reg1 = /[A-Z]/g;
var reg2 = /[a-c]/g;
var reg3 = /[d-f]/g;
var reg4 = /[g-i]/g;
var reg5 = /[j-l]/g;
var reg6 = /[m-o]/g;
var reg7 = /[p-s]/g;
var reg8 = /[t-v]/g;
var reg9 = /[w-z]/g;
var pw1 = pw.replace(reg2,'2');
var pw2 = pw1.replace(reg3,'3');
var pw3 = pw2.replace(reg4,'4');
var pw4 = pw3.replace(reg5,'5');
var pw5 = pw4.replace(reg6,'6');
var pw6 = pw5.replace(reg7,'7');
var pw7 = pw6.replace(reg8,'8');
var pw8 = pw7.replace(reg9,'9');
var pw9 = pw8.replace(reg1,function($0,$1,$2){
for(var i =0;i<$0.length;i++){
if($0 != 'Z'){
return String.fromCharCode($0.charCodeAt() + 1).toLowerCase();
}else{
return 'a';
}
}
})
return pw9;
}
while(line = readline()){
console.log(check(line));
}
16.实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
输入
abcdd
输出
dd
while(line = readline()){
var obj = {}; //用对象存字符串与次数
var res = '';
for(var i=0; i<line.length; i++){
if(!obj[line[i]]) {
obj[line[i]] = 1;
} else{
obj[line[i]]++;
}
}
var min = line.length;
for(var item in obj){ //取到出现次数最少的字符的次数
if(obj[item]<min){
min = obj[item];
}
}
for(var i=0; i<line.length; i++){
if(obj[line[i]] != min){
res+=line[i];
}
}
print(res);
}
- 一个DNA序列由A/C/G/T四个字母的排列组合组成。G和C的比例是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度)。
给定一个很长的DNA序列,以及要求的最小子序列长度,在其中找出GC-Ratio最高的子序列。
输入
AACTGTGCACGACCTGA
5
输出
GCACG
while(str=readline()){
var n=parseInt(readline());
var result="";
var max=0;
for(var i=0,len=str.length;i<len-n;i++){
var temp=str.substr(i,n);
var tempcount=0;
//找到子字符串中GC最多的子串
for(var j=0;j<n;j++){
if(temp[j]=="C" || temp[j]=="G"){
tempcount++;
}
}
if(tempcount>max){
max=tempcount;
result=temp;
}
}
if(str.length>n){
print(result);
}else{
print(str);
}
}
- 实现一个二维数组转置的方法。
var arr1 = [[30, -1, 90], [70, 100, -40], [39, 29, 6]];
var arr2 = [];
//确定新数组有多少行
for (var i = 0; i < arr1[0].length; i++) {
arr2[i] = [];
}
//动态添加数据
//遍历原数组
for (var i = 0; i < arr1.length; i++) {
for (var j = 0; j < arr1[i].length; j++) {
arr2[j][i] = arr1[i][j];
}
}
//打印新数组
for (var i = 0; i < arr2.length; i++) {
for (var j = 0; j < arr2[i].length; j++) {
console.log(arr2[i][j]);
}
console.log("<br />");
}
-
求最长回文子串
暴力法:
var longestPalindrome = function(s) {
let n = s.length;
let result = ‘’
for(let i = 0;i<n;i++){
for(let j=i+1;j<=n;j++){
let str = s.slice(i,j);
let f = str.split(’’).reverse().join(’’);if(str == f){ result = str.length > result.length ? str : result; } }
}
console.log(result);return result;
};
对称查找法:
一核对称:121、12321、1
双核对称:11、1221、123321
先枚举每一个字符,再针对该字符进行左右(双核对称时为当前字符和下一个字符)查找相等匹配
var longestPalindrome = function(s) {
var max = '';
var len = s.length
if(len < 2) return s;
for (var i = 0; i <= len; i++) {
var max_new = core(s,len,i)
max = max_new.length > max.length ? max_new : max;
}
return max;
};
function core(str, str_len, str_i){
var max_1 = loop(str_i-1, str_i+1); // 一核对称 str_len >= 3 str_i = 1
var max_2 = loop(str_i, str_i+1); // 双核对称 str_len >= 2 str_i = 0
return max_1.length > max_2.length ? max_1 : max_2;
function loop(pre, next){
if(!str[pre] || !str[next]) return str.slice(pre+1, next);
if(str.charAt(pre) === str.charAt(next)) return loop(pre-1, next+1)
else return str.slice(pre+1, next)
}
}