当前位置: 首页 > article >正文

JAVA利用方法实现四道题

        

目录

        

1.给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回-1

2.计算字符串最后一个单词的长度,单词以空格隔开。(注:字符串末尾不以空格为结尾)

       3.如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。

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

        总结:


1.给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回-1

         1.首先,先定义一个数组,准备用来存放 外来字符串对象(引用是 s ),用来存储其中的 不同元素个数。

        

         为什么定义整型数组来接收?再看下面的代码:

        

        我们先遍历一遍外来的字符串 ,再通过 charAt方法 转换成字符,字符将会类似 ASCII 值,但更准确说是 Unicode 码值被隐式转换为整型作为 count 的下标来使用,因为 count 数组元素初始值默认是0,再通过 ++ 来计算当前的字符 有多少个一样的。 由于是遍历字符串,其他的字符同理。储存在不同 Unicode 码值 作为 count 数组的下标。

        2.接着,再通过遍历一次字符串,重头开始找到第一个只出现一次的字符,再返回下标,没有只出现一次的字符则返回-1.

        

         完整代码:

        

class Solution {
    public int firstUniqChar(String s) {
        int[] count = new int[300];
        for(int i=0;i < s.length();i++) {
            count[s.charAt(i)]++;
        }

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

2.计算字符串最后一个单词的长度,单词以空格隔开。(注:字符串末尾不以空格为结尾)

         首先利用 lastIndexof 方法,用于查找指定元素(可以是字符)在对象中的最后一次出现的位置索引(也是下标)。

        

        上述代码,我们先通过  lastIndexof 方法 找到最后一个出现的空格,返回的下标用 end 接收,substring 方法 是从指定的索引开始,截取到原字符串的末尾,返回一个新的字符串。所以用了新 引用 s2 接收,得到最后一个单词,最后打印最后一个单词长度就完成了。

        完整代码:

        

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()) {
            String s = sc.nextLine();

            int end = s.lastIndexOf(" ");

            String s2 = s.substring(end + 1);

            System.out.println(s2.length());
        }
        
    }
}

        有循环输入是因为考虑到牛客网的输入需要就是循环。

        

       3.如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 

       1. 首先,我们定义个方法来 判断 当前字符是否 符合 是字母 和 字符数字 。

        

        2. 再通过 toLowerCase 方法把大写字母变成小写的,再使用双指针方法来实现。

        

        双指针也就是 字符左右有两个 指针来指引。

        这里我们定义了 left 左指针,right 右指针。

        

        3. 再通过循环找到合法的字符,这里就使用到了刚开始我们创建的方法,用来找字母和数字字符。
                  4.最后,再判断左右两边字符是否一样,不一样肯定就不是回文串了,返回false,如果一样,则通过

else里的代码再来进行判断。

        完整代码;

        

class Solution {
    public static boolean isTrue(char c) {
        if(c >= 'a' && c <= 'z' || c >= '0' && c <= '9') {
            return true;
        }
        return false;
    }
    public 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 {
                left++;
                right--;
            }
        }
          return true;
    }
}

         最后的返回 true 指 左右各自字符都通过判断了,左右两边字符都相等。

        

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

         完整代码:

class Solution {
    public int countSegments(String s) {

        int count = 0;

        String[] s1 = s.split(" ");
        for(String s2:s1) {
            if (!s2.isEmpty()) {
                count++;
            }
        }
        return count;
    }
}

        首先,把外来的 引用给到 split 方法,可以将字符串按照指定的字符分割,传入的是空格,就会按照空格来分割字符串,最后它返回一个字符串数组,我们新建 s1 数组用来接收。

        前面也定义了个 变量count ,用来存储单词数。

        接着通过一个for 循环,isEmpty 用于判断一个字符串对象是否为空字符串,因为如果前面我们字符串有连续的空格,就会分割出两个空格之间的空字符串,所以要使用到 isEmpty 来判断count 是否要 ++,如果是为空字符串返回true,若字符串长度不为空,则返回 false  。

        最后返回的 count 这个字符串的 单词数。

        

        

        总结:

        这些题我们使用到的 方法:

        1. toLowerCase 方法,用于将字符进行大小写转换。

        2. charAt 方法,得到某个字符。

        3. lastIndexOf 方法,在字符串中查找指定字符最后一次出现的位置索引(下标)。

        4. substring 方法,从指定的索引(下标)开始,截取到原字符串的末尾,返回一个新的字符串。

        5. split 方法,用于指定按照何种模式(可以是字符)来分割字符串。该方法会根据指定的正则表达式(可以是字符)将原字符串分割成多个子字符串,并返回一个包含这些子字符串的数组。

        6. isEmpty 方法,用于判断一个字符串对象是否为空字符串。


http://www.kler.cn/a/376409.html

相关文章:

  • 关于函数指针的一些例子说明
  • Android启动流程_Init阶段
  • 基于知识引导提示的因果概念提取(论文复现)
  • spring 学习路线梳理(二)注解
  • 华为实时视频使用FLV播放RTSP流
  • Python+Appium+Pytest+Allure自动化测试框架-代码篇
  • Spring AI : 让ChatGPT成为你构建应用的核心亮点
  • 字符串统计(Python)
  • 什么是 HTTP 代理?它如何工作?
  • Unity 6 来袭
  • 一个系列搞懂23种设计模式
  • 服务器与服务器之间文件上传下载
  • 基于java的移动端自动化测试 - appium-client api -DesiredCapabilities属性有哪些?
  • Mac 配置SourceTree集成云效
  • uniapp 使用 websocket
  • 从方言对话这枚“落子”,看AI手机“棋局”的尴尬赛点
  • Ansible 部署应用
  • 数据结构(Java)—— 认识泛型
  • 河南省教育厅办公室关于举办2024年河南省高等职业教育技能大赛的通知
  • Java Collection/Executor DelayedWorkQueue 总结
  • MMSegmentation测试阶段推理速度非常慢的一种可能原因
  • 【前端基础】HTML 基础
  • 一文带你弄懂thermal governor IPA
  • 为什么大家都在学数字孪生呢?
  • Keras 3 示例:开启深度学习之旅
  • 【前端基础】CSS基础