牛客网刷题——JAVA

简介: 牛客网刷题——JAVA

@TOC

一、字符串中的第一个唯一字符

给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
在这里插入图片描述

public static void main(String[] args) {
        int i = firstUniqChar("nowcoder");
        System.out.println(i);
    }
    public static int firstUniqChar(String s) {
        int[] count = new int[26];
        for (int i = 0; i <s.length() ; i++) {
            count[s.charAt(i)-'a']++;
        }
        for (int i = 0; i < s.length(); i++) {
            if(count[s.charAt(i)-'a'] == 1) {
                return i;
            }
        }
        return -1;
    }

在这里插入图片描述

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

计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
HJ1 字符串最后一个单词的长度
在这里插入图片描述
方法1:

public  static void  main(String [] args) throws Exception{
       Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        String[] strings = s.split(" ");
        System.out.println(strings[strings.length-1].length());
     }

方法2:

public  static void  main(String [] args) throws Exception{
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        int count = 0;
        for (int i = s.length()-1; i >= 0; i--) {
            if(s.charAt(i) != ' ')
            {
                count++;
            }else{
                break;
            }
        }
        System.out.println(count);
     }

三、字符串中的单词数

统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。

在这里插入图片描述
在这里插入图片描述

public int countSegments(String s) {
        s += ' ';
        int count = 0;
        for(int i=0; i<s.length()-1;i++) {
            if(s.charAt(i)!=' '&&s.charAt(i+1) == ' '){
                count++;
            }
        }
        return count;
    }

四、转换成小写字母

给你一个字符串 s ,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。
方法1:

 public String toLowerCase(String s) {
      return s.toLowerCase();
    }

方法2:

public String toLowerCase(String s) {
       char[] ch = s.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            ch[i] = Character.toLowerCase(s.charAt(i));
        }
        return new String(ch);
    }

五、验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
方法1:

public static boolean isTrue(char c) {
        if((c >= 'a' && c <= 'z')||(c >= '0' && c <= '9')) {
            return true;
        }else {
            return false;
        }
    }
    public static boolean isPalindrome(String s) {
        s = s.toLowerCase();
        int left = 0;
        int right = s.length()-1;
        while (left < right) {
            while(left < right && !isTrue(s.charAt(left))) {
                left++;
            }
            while(left < right && !isTrue(s.charAt(right))) {
                right--;
            }
            if(s.charAt(left) != s.charAt(right)) {
                return false;
            }else {
                right--;
                left++;
            }
        }
        return true;
    }

方法2:

public static boolean isPalindrome(String s) {
        s = s.toLowerCase();
        int left = 0;
        int right = s.length()-1;
        while(left < right) {
            while(left < right &&  !Character.isLetterOrDigit(s.charAt(left)) ) {
                left++;
            }
            while(left < right &&  !Character.isLetterOrDigit(s.charAt(right)) ) {
                right--;
            }
            if(s.charAt(left) != s.charAt(right)) {
                return false;
            }else {
                left++;
                right--;
            }
        }
        return true;
    }
目录
相关文章
|
10月前
|
算法 Java C++
【Java 刷题记录】位运算
【Java 刷题记录】位运算
87 2
|
9月前
|
Java
2022蓝桥杯大赛软件类省赛Java大学B组真题 刷题统计
2022蓝桥杯大赛软件类省赛Java大学B组真题 刷题统计
85 0
|
10月前
|
Java
JAVA数据结构刷题 -- 二叉树进阶
JAVA数据结构刷题 -- 二叉树进阶
61 0
|
10月前
|
存储 Java
JAVA数据结构刷题 -- 力扣二叉树
JAVA数据结构刷题 -- 力扣二叉树
71 0
|
10月前
|
算法 Java C++
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
|
10月前
|
消息中间件 前端开发 Java
java面试刷题软件kafka和mq的区别面试
java面试刷题软件kafka和mq的区别面试
|
10月前
|
Java 索引
JAVA刷题之数组的总结和思路分享
JAVA刷题之数组的总结和思路分享
|
14天前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
136 60
【Java并发】【线程池】带你从0-1入门线程池
|
3天前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
50 23
|
10天前
|
Java 调度
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
75 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码

热门文章

最新文章