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

CF 58A.Chat room(Java实现)

问题分析

        输入一个字符串,判断这个字符串是否能按序组成“hello”。

思路分析

        题目说的意思是任意删除字母,能否组成"hello",实际就是判断'h'、'e'、'l'、'o'的下标是否一个比一个大,同时看'e'和'o'之间是否有两个'l'。这里我使用了indexof函数,判断'h'的首次出现位置,确认有‘h’时就使用substring函数删掉前面的所有字符,再判断‘e’的位置,同理删除前面的所有字符,依次类推。这样就能保证四个字符按序出现,如果indexof函数返回值为-1,说明没有这个字符就输出NO并结束。同时可以用input.indexOf("l")!=input.lastIndexOf("l"),判断是否有两个‘l’。

代码

       

import java.util.*;
 
public class Main {
	public static void main(String[] args)  {
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();//输入值
		int h=input.indexOf("h");//获取h首次出现的位置
		if (h!=-1){//如果有h
			input=input.substring(h);//截取h出现后的子字符串
		}else {//如果没有h
			System.out.println("NO");//输出no
			return;//并结束
		}
		int e=input.indexOf("e");//获取更新的子字符串的e首次出现的位置
		if (e!=-1){//如果有e
			input=input.substring(e);//截取e出现后的子字符串
		}else {//如果没有
			System.out.println("NO");//输出no
			return;//并结束
		}
		int l=input.indexOf("l");//获取更新的子字符串的l首次出现的位置
		if (l!=-1&&input.indexOf("l")!=input.lastIndexOf("l")){//如果l存在,且第一个l和最后一个l的位置不同,即至少有两个l
			input=input.substring(l);//截取l出现后的子字符串
		}else {//如果没有l
			System.out.println("NO");//输出no
			return;//并结束
		}
		int o=input.indexOf("o");//获取更新的子字符串的o首次出现的位置
		if (o!=-1){//如果有o
			System.out.println("YES");//构成“hello”,输出YES
		}else {//没有o
			System.out.println("NO");//失败,输出NO
 
		}
 
	}
}

         但是这么看来重复的代码有点多,你可以设定一个方法,通过调用解决反复冗杂的问题,也可以换一个方法

import java.util.*;
 
public class Main {
	public static void main(String[] args)  {
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();//输入字符串
		int index=input.indexOf("h");//用index统一定义某个字符首次出现的位置
        if (index==-1){//如果h不存在
			System.out.println("NO");//输出No
			return;//结束
		}
		index=input.indexOf("e",index+1);//此处不使用截取,而是从h之后的位置计算e出现的位置
		if (index==-1){//如果e不存在
			System.out.println("NO");//输出no
			return;//结束
		}
		index=input.indexOf("l",index+1);//同理,上一个index之后计算l出现的位置
		if (index==-1||-1==input.indexOf("l",index+1)){//此处判断此时是否有一个l,同时判断还有没有下一个l,如果任一不存在就报错
			System.out.println("NO");//输出no
			return;//结束
		}
		index=input.indexOf("l",index+1);//更新第二个l的位置
		index=input.indexOf("o",index+1);//在第二个l的位置之后寻找o
		System.out.println(index==-1?"NO":"YES");//三目运算判断输出的值
	}
}

        但是这个题的示例有个bug,即使不判断h是否存在,都会通过,所有的示例中都会有h出现     

        感谢您能够看到这里,一起见证小何同学的算法学习,如果您有不同的见解,希望能得到您的指点和点悟;如果您是和我一样的同学,也希望这篇文章能对您有所帮助。

相关文章:

  • 【ProtoBuf】proto3语法(一)
  • ctfshow——版本控制泄露源码
  • OPPO高级大模型算法岗内推
  • LeetCode 热题100 141. 环形链表
  • linux 打包解压命令
  • 计算机毕业设计SpringBoot+Vue.js个性化图书推荐系统(源码+LW文档+PPT+讲解+开题报告)
  • KubeSphere安装mysql
  • WebSocket简单介绍 并接入deepseek
  • 高并发内存池的thread cache部分实现及测试
  • linux-c 字节序问题--大小端
  • C语言学习笔记-初阶(13)scanf介绍
  • 监听其他音频播放时暂停正在播放的音频
  • 3-2 WPS JS宏 工作簿的打开与保存(模板批量另存为工作)学习笔记
  • C++的类型转换
  • 设计一个光伏热泵系统的 PID 模糊控制器
  • windows本地升级npm
  • 短剧源码部署搭建小程序搭建IAA+IAP混合解锁模式
  • C语言--文件操作
  • BERT模型详解及代码复现
  • [Web 安全] PHP 反序列化漏洞 —— PHP 反序列化漏洞演示案例
  • 政府网站建设公司/网页开发
  • seo做的最好的网站/全国疫情地区查询最新
  • 北京感冒病毒最新消息/成都有实力的seo团队
  • 模仿 网站/百度极速版
  • 成都专业做网站的公司有哪些/如何优化培训体系
  • 太原门户网站/线上推广的方法