尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【算法日记】String:字符串中的第一个唯一字符,字符串最后一个单词的长度,验证回文串,字符串中的单词数

【算法日记】String:字符串中的第一个唯一字符,字符串最后一个单词的长度,验证回文串,字符串中的单词数
📅 发布时间:2026/7/19 10:41:48

文章目录

  • 一、字符串中的第一个唯一字符(LC387)
    • 题目描述
    • 解题思路
    • 代码实现
  • 二、字符串最后一个单词的长度(HJ1)
    • 题目描述
    • 解题思路
    • 代码实现
  • 三、验证回文串(LC125)
    • 题目描述
    • 解题思路
    • 代码实现
  • 四、字符串中的单词数(LC434)
    • 题目描述
    • 解题思路
    • 代码实现
  • 五、程序运行结果
    • 题目描述
    • 解题思路

一、字符串中的第一个唯一字符(LC387)

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

题目描述

解题思路

  • 定义count数组记录每个字符出现次数。字符本质就是ASCII码,减去'a'便于下标从0开始记录,这样数组容量为26就够用了。
  • 遍历字符串,第一个count数组内元素值为1的就是首个出现一次的字符。

代码实现

publicintfirstUniqChar(Strings){int[]count=newint[26];for(inti=0;i<s.length();i++){charch=s.charAt(i);count[ch-'a']++;}for(inti=0;i<s.length();i++){charch=s.charAt(i);if(count[ch-'a']==1)returni;}return-1;}

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

题目描述

对于给定的若干个单词组成的句子,每个单词均由大小写字母混合构成,单词间使用单个空格分隔。输出最后一个单词的长度。

解题思路

  1. 将句子按空格分割成单词数组,最后取数组的最后一个单词,返回其长度。
  2. 找到倒数第一个空格的索引,截取尾部字符串再返回长度

代码实现

  • 思路1:
importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannerscan=newScanner(System.in);Stringstr=scan.nextLine();String[]strArr=str.split(" ");System.out.println(strArr[strArr.length-1].length());System.out.println(len);}}
  • 思路2
importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannerscan=newScanner(System.in);Stringstr=scan.nextLine();intindex=str.lastIndexOf(" ");intlen=str.substring(index+1).length();System.out.println(len);}}

注意:计算字符串长度需要调用length()方法,计算数组长度使用length属性

三、验证回文串(LC125)

验证回文串

题目描述

解题思路

  1. 预处理字符串:首先将字符串中的所有大写字符转换为小写字符,并过滤掉所有非字母数字字符,得到一个只包含小写字母和数字的新字符串。
  2. 验证回文:使用双指针法,一个指针从字符串开头开始,另一个指针从字符串结尾开始,先判断是否为数字或字母,如果不是则跳过。验证通过则依次比较两个指针所指向的字符是否相同。如果所有对应位置的字符都相同,则是回文串,否则不是。

代码实现

publicclassSolution{booleanisCharOrDigit(charch){if(Character.isLetter(ch)||Character.isDigit(ch)){returntrue;}returnfalse;}publicbooleanisPalindrome(Strings){s=s.toLowerCase();intl=0;intr=s.length()-1;while(l<r){while(l<r&&!isCharOrDigit(s.charAt(l))){l++;}while(l<r&&!isCharOrDigit(s.charAt(r))){r--;}if(s.charAt(l)==s.charAt(r)){l++;r--;}else{returnfalse;}}returntrue;}}

四、字符串中的单词数(LC434)

字符串中的单词数

题目描述

解题思路

  1. 调用split()按空格分割成数组
    注意:多个空格连在一起时也会被分割为""

  2. 定义计数器count,遍历数组,当长度不为0才计数

代码实现

publicintcountSegments(Strings){intlen=s.length();if(len==0)return0;intcount=0;Stringss[]=s.split(" ");for(Stringr:ss){if(r.length()!=0)count++;}returncount;}

五、程序运行结果

题目描述

指出下列程序运行的结果:

publicclassExample{Stringstr=newString("good");char[]ch={'a','b','c'};publicstaticvoidmain(Stringargs[]){Exampleex=newExample();ex.change(ex.str,ex.ch);System.out.print(ex.str+" and ");System.out.print(ex.ch);}publicvoidchange(Stringstr,charch[]){str="test ok";ch[0]='g';}}

解题思路

  • change传入的都是引用,形参也指向原来的地址。
  • 区别在于:一个修改了形参的指向,另一个通过形参修改了实参的值。
    • string类是不可变的,只能新建一个string类,此时形参str不再指向good,而指向了test ok,但实参str依旧指向good,没有改变。
    • ch[]没有改变指向,直接修改了实参的值。
  • 此时实参str没有改变变化,ch[0]改变。

输出结果:good and gbc

相关新闻

  • Unity逆向工程工具AssetRipper:游戏资源提取与分析的深度技术指南
  • OpenBoardView完整指南:免费开源PCB查看器的快速入门教程
  • 长沙积家回收价格查询及各大平台实测排行(2026年7月最新) - 收的高名表回收平台

最新新闻

  • 2026 武汉 LV 香奈儿爱马仕名包回收价格表:最新行情 + 正规回收渠道指南 - 奢侈品回收机构参考
  • 5步快速上手KL-Loss:在MS-COCO数据集上实现SOTA目标检测性能
  • 2026年7月劳力士 中国区售后服务网络更新优化 全国60+门店地址及电话汇总 - 劳力士中国服务中心
  • DBDiff常见问题解答:从安装错误到迁移脚本生成的15个解决方案
  • Ubuntu RVM包深度解析:为什么它是Ruby开发者的必备神器?
  • PKHeX自动化插件:构建合法宝可梦的终极解决方案

日新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号