确定字符串是否包含唯一字符
题目描述
实现一个算法来识别一个字符串的字符是否是唯一的(忽略字母大小写)。
若唯一,则输出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();
}
}