CF 58A.Chat room(Java实现)

CF 58A.Chat room(Java实现)_第1张图片

问题分析

        输入一个字符串,判断这个字符串是否能按序组成“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出现     

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

你可能感兴趣的:(java,算法,开发语言)