HJ1 字符串最后一个单词的长度

描述

计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
输入描述:输入一行,代表要计算的字符串,非空,长度小于5000。
输出描述:输出一个整数,表示输入字符串最后一个单词的长度。
示例1
输入:
hello nowcoder
输出:
8
说明:最后一个单词为nowcoder,长度为8

  1. //计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
  2. let line = readline();
  3. function getLastWord(str)
  4. {
  5. let i = str.length - 1
  6. let j = 0
  7. while(str[i] !== ' ' && i >= 0) {
  8. i -= 1
  9. j += 1
  10. }
  11. return j
  12. }
  13. console.log(getLastWord(line));

HJ2 计算某字符出现次数

描述

写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)
数据范围: 1≤n≤1000
输入描述:
第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字符。
输出描述:
输出输入字符串中含有该字符的个数。(不区分大小写字母)
示例1
输入:ABCabc A
输出:2

  1. const str = readline();
  2. const key = readline();
  3. var num = 0;
  4. const arr = str.split('');
  5. arr.forEach(item=>{
  6. if(item.toLowerCase()===key.toLowerCase())
  7. {
  8. num ++;
  9. }
  10. })
  11. console.log(num)

HJ4 字符串分隔

描述

•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入描述:
连续输入字符串(每个字符串长度小于等于100)
输出描述:
依次输出所有分割后的长度为8的新字符串
示例1
输入:
abc
输出:
abc00000

  1. var lines = ''
  2. while(line = readline()){
  3. var str = line +'00000000';
  4. for(let i = 8; i < str.length; i += 8) {
  5. console.log(str.substring(i - 8, i));
  6. }
  7. }

HJ5 进制转换

描述

写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在 1≤n≤231−1
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例1
输入:0xAA
输出:170

  1. let str = readline();
  2. let newstr = parseInt(str,16);
  3. console.log(newstr);

输出int型转二进制含1的个数

题目描述
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数
示例1
输入
5
输出
2

  1. let num = parseInt(readline()); // 需要将输入的转为int型数字
  2. let bit = num.toString(2).split(''); // 转为2进制字符,再转为字符数组
  3. let count = 0; // 统计1的个数
  4. for(let i = 0; i < bit.length; i++) {
  5. if( bit[i] == '1') {
  6. count++;
  7. }
  8. }
  9. console.log(count);

数字颠倒

题目描述
描述:

输入一个整数,将这个整数以字符串的形式逆序输出

程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
输入描述:
输入一个int整数
输出描述:
将这个整数以字符串的形式逆序输出

  1. 示例1<br /> 输入<br /> 1516000<br /> 输出<br /> 0006151
let num = readline();
let str = num.split('').reverse();  // 转为字符数组
console.log(str.toString().replace(/,/g,''));

字符串反转

题目描述
写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
输入描述:
输入N个字符
输出描述:
输出该字符串反转后的字符串
示例1
输入
abcd
输出
dcba

let str = readline();
let strRev = str.split('').reverse();
console.log(strRev.toString().replace(/,/g,''));  //还是要先转成字符串的形式

句子逆序

题目描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

输入描述:
将一个英文语句以单词为单位逆序排放。
输出描述:
得到逆序的句子
示例1
输入
I am a boy
输出
boy a am I

let str = readline();
let sentence = str.split(' ');  //通过空格分割字符
let res = [];
for(let i = sentence.length-1; i >= 0; i--) {
    res.push(sentence[i]);   //将句子内容按照单词逆序存入res
}
// res = ["boy","a","am","I"];
// res.toString() = [boy,a,am,I]
// 最后用正则表达式将 逗号换成 空格
console.log(res.toString().replace(/,/g,' '));

n个字符串按照字典序排列。

题目描述
给定n个字符串,请对n个字符串按照字典序排列。
输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。
输出描述:
数据输出n行,输出结果为按照字典序排列的字符串。

示例1<br />    输入<br />    3<br />    cap<br />    to<br />    cat<br />    输出<br />    cap<br />    cat<br />    to
let num = readline();
let str = [];
for(let i = 0; i < num; i++) {
    str.push(readline());
}
res = str.sort();  //直接利用 sort 可以对字符串按照字典序排序
for(let j = 0; j < res.length; j++){
    console.log(res[j]);
}

质数因子

功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(如180的质因子为2 2 3 3 5 )
最后一个数后面也要有空格
详细描述:
函数接口说明:
public String getResult(long ulDataInput)
输入参数:
long ulDataInput:输入的正整数
返回值:
String
输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
示例1
输入
180
输出
2 2 3 3 5

// 质因数=质数+因数,即是质数,也要能被输入的数整除,我们可以从小开始查找
// 180 = 2x2x3x3x5
let num = readline();
let res = [];
for(let i = 2; i <= num; i++ ) {
    if( num%i == 0 )  {  
        res.push(i);     //将该质因数保存起来
        num = num/i; 
        i = 1;  //累加后等于2,又从2开始遍历
    }
}
let res_sort = res.sort(function(a,b){
    return a-b;
}).join(' ')+' ';  //返回字符串,并在两个之间加空格,最后也要加空格
console.log(res_sort);

取近似值

题目描述
写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
输入描述:
输入一个正浮点数值
输出描述:
输出该数值的近似整数值
示例1
输入
5.5
输出
6

let num = readline();
let nums = num.toString().split('.');  //将数字先转成字符串,然后按小数点分成两部分,右边为要判断的数
if(nums[1]>=5) {
    nums[0]++;
    console.log(nums[0]);
} else {
    console.log(nums[0]);
}

提取不重复的整数

题目描述
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
输入描述:
输入一个int型整数
输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
示例1
输入
9876673
输出
37689

let num_str = readline();
//调用split得到字符数组,再直接调用翻转函数
let num_rev = num_str.split('').reverse();  //reverse用于数组,num-rev为逆转后的字符数组
let res = [];
for(let i = 0; i < num_rev.length; i++) {
    if( res.indexOf(num_rev[i]) == -1)
        res.push(num_rev[i]);
}
// res为包含逗号的反转后的字符串,join用于数组放入一个字符串中,默认逗号连接
console.log(res.toString().replace(/,/g,''));

字符个数统计

题目描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。
输入描述:
输入N个字符,字符在ACSII码范围内。
输出描述:
输出范围在(0~127)字符的个数。

示例1<br />    输入<br />    abc<br />    输出<br />    3
// charCodeAt() //将字符转为 ascall 码 
// formCharCode  //将 ascall转为字符,单个转
let str = readline();
let strArr = str.split('');  //需要将连续字符转为字符去重
let strSet = [];
let count = 0;
for(let i = 0; i < strArr.length; i++) {        // 循环遍历,去重
    if( strSet.indexOf(strArr[i]) == -1) {
        strSet.push(strArr[i]);
    }
}
for(let i =0; i < strSet.length; i++) {   // 遍历去重后的数组,判断转换后的 ascall 是否小于 127
    if (strSet[i].charCodeAt() <= 127) 
        count++;
}
console.log(count);

求字符串分组后,每组的和为水仙花数

(注:水仙花数是一个三位数 其个位、十位、百位的立次方 的和等于自身 如 371 = 3^3 + 7^3 + 1^1 )
(1) 如果无法找到该分组 ,返回0 ;
(2) 找到该分组,切分组不唯一 ,返回 -1;
(3)分组唯一 ,则返回分组的组数 ;

给定两个字符串A、B 两个字符串长度相等,A字符串中有一段连续字符,在B字符串中也有一段长度相同位置相同的连续字符串

要求| [A [ i ] -B [ i ] ] | 小于等于给定数值V 。
输入要求:
第一行 字符串A
第二行 字符串B
第三行 给定数字 V

停车位:给定一个类似”10000100101”的字符串,1代表有车停着,0代表空车位,求在停车位停车与最近的车之间的最大距离

括号的最大嵌套深度

输入一个仅由 “()[]{}” 组成的字符串,计算出有效的括号最大嵌套深度
输入:([]{()})
输出:3

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.nextLine();
    int res = 0;
    int temp = 0;
    Stack<Character> stack = new Stack<>();
    for(int i=0;i<s.length();i++){
        Character c = s.charAt(i);
        if(c=='(') {
            stack.push(')');
            temp++;
            res = Math.max(res,temp);
        }else if(c=='[') {
            stack.push(']');
            temp++;
            res = Math.max(res,temp);
        }else if (c=='{') {
            stack.push('}');
            temp++;
            res = Math.max(res,temp);
        }else {
            if((c==')'||c==']'||c=='}')&&stack.size()>0){
                Character pop = stack.pop();
                if (pop==c){
                    temp--;
                }
            }
        }
    }
    if(temp!=0)res = 0;
    System.out.println(res);
}

第一行输入一个非负整数字符串,第二行输入一个整数n

输出从该字符串中取出n个字符后剩下的字符组成的最小的数(不改变字符顺序)
输入 :
2615371
4
输出:131

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String num = sc.nextLine();
    int n = sc.nextInt();
    StringBuilder num1 = new StringBuilder(num);
    int start = 0;
    int m = num1.length()-n;
    StringBuilder sb = new StringBuilder();
    for(int i=1;i<=m;i++){
        if(num1.substring(start,n+i).contains("0")){
            sb.append(0);
            start = num1.indexOf("0")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }else if(num1.substring(start,n+i).contains("1")){
            sb.append(1);
            start = num1.indexOf("1")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }else if(num1.substring(start,n+i).contains("2")){
            sb.append(2);
            start = num1.indexOf("2")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("3")){
            sb.append(3);
            start = num1.indexOf("3")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("4")){
            sb.append(4);
            start = num1.indexOf("4")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("5")){
            sb.append(5);
            start = num1.indexOf("5")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("6")){
            sb.append(6);
            start = num1.indexOf("6")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("7")){
            sb.append(7);
            start = num1.indexOf("7")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("8")){
            sb.append(8);
            start = num1.indexOf("8")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
        else if(num1.substring(start,n+i).contains("9")){
            sb.append(9);
            start = num1.indexOf("9")+1;
            for(int j=1;j<=start;j++){
                num1 = num1.replace(j-1,j,"h");
            }
        }
    }
    if(sb.length()<=0){
        System.out.println(0);
    }else{
        System.out.println(Long.valueOf(sb.toString()));
    }
}