蓝桥杯刷题

确定字符串是否包含唯一字符

题目描述

实现一个算法来识别一个字符串的字符是否是唯一的(忽略字母大小写)。

若唯一,则输出YES,否则输出NO

在最开始编写是 我的思路是只是用数组和循环解决 创建一个计数变量 通过遍历字符串中的每个字符 用charArr记录存储了几个元素 

通过取出字符 并且设定这个字符在charArr中不存在 循环判断charArr中所有已存在的字符 与当前str中取出的这个字符是否有相同的,如果有就结束内循环

循环结束后再判断是否存在 不存在就将元素存入字符数组中

最开始的代码如下

import java.util.scanner
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str=scan.nextLine();
        
        int count=0;
        int strlen=str.length();
        char[]charArr=new char[strlen];
          for(int i=0;i<strlen;i++){
          char ch=str.charAt(i);
          boolean isTrue=false;
          for(int j=0;j<count;j++){
          if(ch==charArr[j]){
            isTrue=true;
            System.out.println("NO");
            break;
            
          }
          }
          if (!isTrue){
            charArr[count]=ch;
            count++;
          }
          }
        if(count==strlen){
          System.out.println("YES");
        }

        scan.close();
    }

但测试总是过三错一 不知道什么原因

经过反复观察之后发现 在检测到重复字符时,应该立即输出 "NO" 并结束程序,而不是继续检查剩余的字符。

后将代码修改如下

import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str=scan.nextLine();
        
        int count=0;
        int strlen=str.length();
        char[]charArr=new char[strlen];
          for(int i=0;i<strlen;i++){
          char ch=str.charAt(i);
          boolean isTrue=false;
          for(int j=0;j<count;j++){
          if(ch==charArr[j]){
            isTrue=true;
            System.out.println("NO");
            break;
            
          }
          }
          if (!isTrue){
            charArr[count]=ch;
            count++;
          }
          if(isTrue){
            break;
          }
          }
        if(count==strlen){
          System.out.println("YES");
        }

        scan.close();
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值