牛客网——Java刷题篇

简介: 牛客网——Java刷题篇

文章目录

  1. 检测字符串是否为回文
  2. 最后一个单词的长度
  3. 第一个只出现一次的字符
  4. 检测字符串是否为回文

解题思路

验证回文串一般解法都是双指针,而且是使用头尾指针,头指针指向字符串的第一个元素,尾指针指向字符串的最后一个元素,从字符串两端往中间遍历和比较。本题的关键在于字符串是由 ASCII 字符组成,而我们验证时只需要考虑字母和数字字符,因此要把其他字符过滤掉

题解: 

class Solution {

public boolean isPalindrome(String s) {
    // 左指针
    int left = 0;
    // 右指针
    int right = s.length() - 1;

    // 左右指针分别从前和从后往中间移动
    while (left < right) {
        char c1 = s.charAt(left);
        char c2 = s.charAt(right);
        if (!Character.isLetterOrDigit(c1)) {
            // 过滤掉非字母和数字字符
            left++;
            continue;
        }
        if (!Character.isLetterOrDigit(c2)) {
            // 过滤掉非字母和数字字符
            right--;
            continue;
        }
        // 忽略字母大小写
        if (Character.toLowerCase(c1) != Character.toLowerCase(c2)) {
            return false;
        }
        // 挪动指针
        left++;
        right--;
    }
    return true;
}

}

  1. 最后一个单词的长度

方法一(指针)

解题思路

定义一个指针变量。

从后往前遍历字符串,当遇到空格时,用指针记录位置信息,并终止循环。

总长度减去指针到开头一段的长度,即得到最后一个单词的长度。

题解: 

import java.util.Scanner;

public class Main{

public static void main(String[] args){
    //标准输入
    Scanner sc=new Scanner(System.in);
    //键盘输入字符串
    String s=sc.nextLine();
    //定义指针变量
    int index=-1;
    for(int i=s.length()-1;i>=0;i--){
        //从后往前第一个空格的位置
        if(s.charAt(i)==' '){
            index=i;
            break;
        }
    }
    //总长度减去指针到开头一段的长度,即得到最后一个单词的长度
    System.out.println(s.length()-index-1);
}

}

方法二(字符串分割)

解题思路

通过split函数将原字符串分割为字符串数组。

字符串数组最后一个元素即是原字符串的最后一个单词,直接输出其长度。

题解: 

import java.util.Scanner;

public class Main{

public static void main(String[] args){
    //标准输入
    Scanner sc=new Scanner(System.in);
    //键盘输入字符串
    String s=sc.nextLine();
    //以空格分割为字符串数组
    String[] arr=s.split(" ");
    //字符串数组最后一个元素即是原字符串的最后一个单词,直接输出其长度
    System.out.println(arr[arr.length-1].length());
}

}

  1. 第一个只出现一次的字符

1 <= s.length <= 105
s 只包含小写字母
解题思路

1.统计各个字符出现次数

定义一个计数数组count[],遍历字符数组,如果字符出现多次,则count++

2.重新遍历字符数组

重新遍历一次 字符数组,如果发现「它」只出现一次,直接返回对应的下标,否则循环终止之后返回 -1

题解:

public int firstUniqChar(String s){

    int[] count = new int[26];
    for (int i = 0; i < s.length(); i++) {

        char ch = s.charAt(i);
        count[ch-'a'] ++;

    }
    for (int i = 0; i < s.length(); i++) {
        char ch = s.charAt(i);
        if(count[ch-'a'] == 1){
            return i;
        }
    }
    return -1;

}

相关文章
|
6月前
|
Java
2022蓝桥杯大赛软件类省赛Java大学B组真题 刷题统计
2022蓝桥杯大赛软件类省赛Java大学B组真题 刷题统计
53 0
|
7月前
|
算法 Java C++
【Java 刷题记录】位运算
【Java 刷题记录】位运算
55 2
|
7月前
|
算法 Java
Java刷题有感
Java刷题有感
|
7月前
|
Java
JAVA数据结构刷题 -- 二叉树进阶
JAVA数据结构刷题 -- 二叉树进阶
45 0
|
7月前
|
存储 Java
JAVA数据结构刷题 -- 力扣二叉树
JAVA数据结构刷题 -- 力扣二叉树
57 0
|
7月前
|
算法 Java C++
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
|
7月前
|
消息中间件 前端开发 Java
java面试刷题软件kafka和mq的区别面试
java面试刷题软件kafka和mq的区别面试
|
存储 算法 Java
《代码随想录》刷题笔记——哈希表篇【java实现】
《代码随想录》刷题笔记——哈希表篇【java实现】
81 0
|
7月前
|
Java 索引
JAVA刷题之数组的总结和思路分享
JAVA刷题之数组的总结和思路分享
|
7月前
|
Java
JAVA刷题之字符串的一些个人思路
JAVA刷题之字符串的一些个人思路