记录恒生2019暑假笔试两道编程题未做出来的惨痛经历

本文介绍两种字符串操作技巧:一是统计字符串中每个字符出现的频率,并输出指定频率的字符;二是实现字符串的逆序输出,特别考虑了字符串首尾空格的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题一:从控制台输入一个字符串和一个数字,输出字符串中字符出现频率与数字相同的
例1 “acbbefdc” 1
输出:
a
d
e
f
例2 从控制台输入例2 “acbbefdc” 2
输出:
b
c

思路:通过hashmap的方法采取键对值的方法,定义双列集合存储字符串中字符以及字符出现的次数,遍历字符数组获取每一个字符,并将字符存储在双列集合中,打印双列集合与输入数字相同的字符出现的次数。

程序:
package com.nowcoder;
import java.util.HashMap;
import java.util.Scanner;

public class question1 {
public static void main(String[] args) {
Scanner wsq = new Scanner(System.in);
Scanner num = new Scanner(System.in);
System.out.println(“请输入任意一串字符串”);
//1,定义一个需要被统计字符的字符串,并随意输入一串字符串
String s = wsq.next();
int n= Integer.parseInt(num.next());
//2,将字符串转化为字符数组,才能拿到每一个字符
char [] arr = s.toCharArray();
//3,定义双列集合存储字符串中字符以及字符出现的次数
HashMap<Character, Integer> yy = new HashMap<>();
//4,遍历字符数组获取每一个字符,并将字符存储在双列集合中
for(char c : arr){
//5,存储过程中要做判断,如果集合中不包含这个键,就将该字符当作键,值为1存储;如果集合中包含这个键,就将值加1存储
/if(!yy.containsKey©){ //如果不包含这个键
yy.put(c, 1);
}else{
yy.put(c,yy.get© + 1);
}
/
yy.put(c,!yy.containsKey© ? 1 :yy.get© + 1);

    }
    //6,打印双列集合与输入数字相同的字符出现的次数
    for (Character key : yy.keySet()) {
        if(n==yy.get(key))//yy.keySet() : 代表所有键的集合
        {
            System.out.println(key);    //yy.get(key) : 根据键获取值
        }
    }
}

}

题二:从控制台输入一个字符串,逆序输出。
如:
输入”I am a student“。
输出”student a am I“。

思路:将输入的字符串以空格分隔,然后存入字符串数组中,采取数组逆序输出的同时补上空格。
注:边界条件,字符串前后有空格的情况。对字符串首尾判断,如有空格插入字符,首位有空格插入"1 “,末尾有空格插入” 1";
程序:
package com.nowcoder;

import java.util.Scanner;

public class question2 {
public static void main(String []args){
Scanner arr=new Scanner(System.in);
String s=arr.nextLine();
// String s="i am a student ";
System.out.println(s);
String s1=conversionStr(s);
System.out.println(s1);

}

public static String conversionStr(String string)
{
    if (string == null || "".equals(string))
        return null;
    int m1=0;int m2=0;
    if (' ' == string.charAt(0)){
    StringBuilder n1=new StringBuilder(string);
    n1.insert(0,"1 ");
    string=n1.toString(); m1=1;
    }
    if (' '==(string.charAt(string.length()-1))){
    StringBuilder n2=new StringBuilder(string);
    n2.insert(string.length()," 1");
    string=n2.toString();m2=1;}
    String[] arrStr = string.split(" ");
    StringBuilder sb = new StringBuilder(string.length());
    for (int i=arrStr.length-1-m2;i>=m1;i--)
    {
        sb.append(arrStr[i]).append(" ");
    }
    return sb.toString();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值