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.mzph.cn/pingmian/58756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端三件套(HTML + CSS + JS)

前言&#xff1a; 前端三件套&#xff0c;会用就行 毕竟在后面学习JavaWeb&#xff0c;以及在学习vue的时候也有帮助 前端三件套&#xff1a; HTML 定义网页的结构和内容。CSS 负责网页的样式和布局。JavaScript 添加动态交互和功能。 使用到的工具是Visual Studio Code 即…

Android -- [SelfView] 自定义圆盘指针时钟

Android – [SelfView] 自定义圆盘指针时钟 ps:简约圆盘指针时钟&#xff0c;颜色可调、自由搭配&#xff1b;支持阿拉伯数字、罗马数字刻度显示&#xff1b;效果图 使用&#xff1a; <!-- 自定义属性参考 attrs.xml 文件 --> <com.nepalese.harinetest.player.Virg…

边缘计算【智能+安全检测】系列教程--agx orin解决RTC时间问题

因为是离线运行&#xff0c;首要问题是时间不准确&#xff0c;就在主板上加装了纽扣电池&#xff0c;但是会有一系列问题&#xff0c;比如无法将RTC时间回写到系统时间&#xff0c;或者无法将系统时间写到RTC中等等一些列问题。为解决这些问题&#xff0c;一劳永逸的方式&#…

智能家居10G雷达感应开关模块,飞睿智能uA级别低功耗、超高灵敏度,瞬间响应快

在当今科技飞速发展的时代&#xff0c;智能家居已经逐渐成为人们生活中不可或缺的一部分。从智能灯光控制到智能家电的联动&#xff0c;每一个细节都在为我们的生活带来便利和舒适。而在众多智能家居产品中&#xff0c;10G 雷达感应开关模块以其独特的优势&#xff0c;正逐渐成…

【源码+文档】基于SpringBoot+Vue旅游网站系统【提供源码+答辩PPT+参考文档+项目部署】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

Python Matplotlib:基本图表绘制指南

Python Matplotlib&#xff1a;基本图表绘制指南 Matplotlib 是 Python 中一个非常流行的绘图库&#xff0c;它以简单易用和功能丰富而闻名&#xff0c;适合各种场景的数据可视化需求。在数据分析和数据科学领域&#xff0c;Matplotlib 是我们展示数据的有力工具。本文将详细讲…

开源库 FloatingActionButton

开源库FloatingActionButton Github:https://github.com/Clans/FloatingActionButton 这个库是在前面这个库android-floating-action-button的基础上修改的&#xff0c;增加了一些更强大和实用的特性。 特性&#xff1a; Android 5.0 以上点击会有水波纹效果 可以选择自定义…

【Hello World 】

【Hello World 】! C语言实现C实现Java实现Python实现 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 几乎每一个程序员都是从Hello World!开始自己的程序人生&#xff0c;作为一个初学编程的小朋友&#xff0c;也需要先编程来输出Hello Wo…

从实验室到生活:超分子水凝胶湿电发电机的应用之路

大家好&#xff01;今天来了解一种新型的绿色湿电发电机&#xff08;MEG&#xff09;——《Green moisture-electric generator based on supramolecular hydrogel with tens of milliamp electricity toward practical applications》发表于《nature communications》&#xf…

零基础学习Java AI Spring AI

零基础学习Java AI Spring AI 随着人工智能&#xff08;AI&#xff09;技术的超速发展&#xff0c;越来越多的开发者开始将目光投向AI应用的开发。作为一名java程序员&#xff0c;如果不转型就会面临淘汰&#xff0c;程序员的世界就是这么的实现。 现在&#xff0c;市面上大多…

【周末推荐】Windows无缝连接iPhone

关注“ONE生产力”&#xff0c;获取更多精彩推荐&#xff01; 又到了周末推荐时间了&#xff0c;今天我们介绍一个Windows内置的功能&#xff0c;能够帮助大家将自己的电脑和iPhone连接在一起。 很多用Windows的小伙伴羡慕macOS可以和iPhone无缝连接&#xff0c;轻松阅读和回…

OV5640摄像模组从入门到精通(1)

本文内容参考&#xff1a; 《OmniVision OV5640 datasheet》 《OV5640 Camera Module — Software Application Notes》 OV5640学习_ov5640手册-CSDN博客 OV5640手册解读-CSDN博客 【FPGA】摄像头模块OV5640-CSDN博客 Camera开发-OV5640(MIPI)-CSDN博客 特此致谢&#x…

el-table type=“selection“换页多选数据丢失的解决办法

element里有一个 reserve-selection属性 设置以后就可以保留之前选中的选项&#xff0c;但还要设置row-key 代码如下&#xff1a; <el-tableref"mytable":data"HostRows"borderv-loading"loading"element-loading-text"正在加载中...&q…

CPU算法分析LiteAIServer视频智能分析平台视频诊断对比度检测:提升视频监控质量的关键技术

在现代安防、工业生产、智能家居等领域&#xff0c;视频监控系统扮演着至关重要的角色。然而&#xff0c;视频质量的好坏直接影响到监控效果&#xff0c;而对比度作为衡量图像质量的重要指标之一&#xff0c;对于视频内容的清晰度和细节表现至关重要。为了应对这一挑战&#xf…

双向 Type-C 转 DP 线:高清视频输出的灵活解决方案

在当今数字化生活中&#xff0c;人们对高效能和高清晰度的需求日益增长。双向 Type-C 转 DP 线应运而生&#xff0c;它以其灵活便捷的特点&#xff0c;为用户提供了一种高清视频输出的解决方案。本文将详细介绍双向 Type-C 转 DP 线的技术原理、适用设备、性能参数以及市场选择…

萤石设备视频接入平台EasyCVR私有化部署视频平台高速公路视频上云的高效解决方案

经济的迅猛发展带来了高速公路使用频率的激增&#xff0c;其封闭、立交和高速的特性变得更加显著。然而&#xff0c;传统的人工巡查方式已不足以应对当前高速公路的监控挑战&#xff0c;监控盲点和响应速度慢成为突出问题。比如&#xff0c;非法占用紧急车道的情况屡见不鲜&…

Spring Boot在信息学科平台建设中的应用

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于保密信息学科平台系统的相关信息成为必…

Chrome与夸克的安全性对比

在当今数字化时代&#xff0c;浏览器的安全性对于用户来说至关重要。Chrome和夸克作为两款流行的浏览器&#xff0c;各有其特点和优势。本文将对这两款浏览器的安全性进行详细对比&#xff0c;帮助用户更好地了解它们之间的差异。&#xff08;本文由https://www.chromegw.com/的…

穿越数据迷宫

第一章 在未来的世界里&#xff0c;人类的生活已经被高度数字化。互联网不再是简单的信息交换平台&#xff0c;而是成为了一个庞大的虚拟世界——“数据迷宫”。在这个世界里&#xff0c;每个人都有一个独特的数字身份&#xff0c;他们的生活、工作、娱乐都离不开这个虚拟空间…

日程安排工具Cal.com的安装

什么是 Cal.com (原 Calendso) ? Cal.com 是一个现代化、灵活且功能强大的开源日程管理平台&#xff0c;旨在为用户提供全面的控制权和定制能力&#xff0c;是适合每个人的活动日程安排程序&#xff0c;被誉为 Calendly 的继任者。它的最大特点是完全开源&#xff0c;用户可以…