0


【Java】校招笔试面试必问之 --> 字符串<轻松小刷三道oj题>

文章目录

由于最近学校恢复线下授课,我也就没有那么多空余时间了,所以博客暂时停更了一段时间,今天先给大家带来三道经典字符串oj题,SE部分的博客以后都会补上的~~~🌹🌹

在开发和校招笔试面试中,字符串都是常客,所以字符串是非常重要的,所以学好字符串是非常有必要的,先来三道oj题开开胃!

🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗🍗


1. 字符串中的第一个唯一字符

在这里插入图片描述

这是力扣上的一道题,以上是题目的信息。

注意这道题有一个特点,字符串s只包含小写字母,a的ascii码值是97,一共有26个小写字母,所以我们可以定义一个数组,定义一个i来遍历s的内容,把一个字符作为一个下标,每遇到一个字符,便让数组中这个下标处的元素+1(每个元素都初始化为0)。遍历完s后,数组中的内容也就填充完毕了,这时候可以确定哪些字符只出现了一次,但是怎么确定哪个是第一个唯一字符呢?

只需要回到s的首字符,再重新遍历一下s(因为只有通过s才能确定字符的顺序),同时判定数组中的某个元素是否为1,这样就可以确定第一个唯一字符了。接下来我们画图详解并优化一下~

在这里插入图片描述
具体代码实现:

(其中的类和firstUniqChar方法是题目给定的)

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

//对参数进行判断if(s ==null|| s.length()==0){return-1;}//字符串中只包含小写字母,所以数组长度为26int[] arr =newint[26];//遍历字符串,填充数组元素for(int i=0; i<s.length(); i++){char ch = s.charAt(i);//数组从0下标开始,所以要减去97('a')
            arr[ch-'a']++;}//回到字符串首位置,再次遍历数组,找到第一个不重复的字符(arr[ch-'a'] == 1)for(int i=0; i<s.length(); i++){char ch = s.charAt(i);if(arr[ch-'a']==1){return i;}}//不存在return-1;

🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧🥧


2. 字符串最后一个单词的长度

在这里插入图片描述
题目信息如上~

该题我们降低一下难度,允许使用Java提供的库方法。

这道题我们讲两种解法,一是用split进行分隔,得到每个单词后输出最后一个单词的长度;二是用substring进行截取,由题意得,字符串末尾不以空格为结尾,单词又以空格隔开,所以我们可以先用lastInderOf获取最后一个空格的下标,再进行截取获得最后一个单词然后输出长度即可。

具体代码如下:

importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[] args){Scanner scan =newScanner(System.in);String str = scan.nextLine();//因为输入包含空格,所以要用nextLine//方法1,分隔//String[] s = str.split(" ");//System.out.println( s[s.length - 1].length());//方法2:截取int index = str.lastIndexOf(" ");String ret = str.substring(index +1);//index是空格的下标,所以要加1System.out.println(ret.length());}}

🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕🍕

3. 验证回文串

在这里插入图片描述
什么是回文串?样如abccba样式的字符串,即左右一一对称。

这道题要更加复杂一点,除了字母还有其他字符,但这道题只考虑字母和数字,也就是说字母和数字才是合法字符,除此之外的字符都可以跳过;其次可以忽略字符的大小写,那么我们就可以把整个字符串都转为大写或转为小写,通过判断字符的ascii码的范围来判断其是否合法。

代码如下:

(其中的类和isPalindrome方法是题目给定的,大家可以自己去力扣上搜一下这道题)

在这里插入图片描述

在这里插入图片描述

classSolution{//判断是否为合法字符privatebooleanisLegalCharacter(char ch){if(ch>='0'&& ch<='9'|| ch>='a'&& ch<='z'){returntrue;}returnfalse;}publicbooleanisPalindrome(String s){//1. 判断是否为数字和字母(判断其ascii码的范围)//2. 忽略大小写,那么就把整个字符串都转为大写或小写//转为小写
        s = s.toLowerCase();int left =0;int right = s.length()-1;while(left < right){//判断左边字符是否为合法字符while(left < right &&!isLegalCharacter(s.charAt(left))){
                left++;}//判断右边字符是否为合法字符while(left < right &&!isLegalCharacter(s.charAt(right))){
                right--;}//此时左右两边字符都为合法字符if(s.charAt(left)!= s.charAt(right)){returnfalse;}else{//说明相等,那就继续判断下两个字符
                left++;
                right--;}}//是回文串returntrue;}}

🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔

看到这里恭喜你又刷完了三道oj题,再次强调字符串是很重要的,所以一定要学好它!!!👊👊💪

最后希望大家给个三连支持一下吧!!!

标签: java 编程语言

本文转载自: https://blog.csdn.net/qq_62594207/article/details/124234378
版权归原作者 夏.冬 所有, 如有侵权,请联系我们删除。

“【Java】校招笔试面试必问之 --> 字符串<轻松小刷三道oj题>”的评论:

还没有评论