- 1. 题目
- 2. 解题思路
- 3. 代码实现(AC_Code)
个人主页:C_GUIQU
归属专栏:每日一题
1. 题目
确定字符串是否包含唯一字符
2. 解题思路
题目要求:判断输入的字符串是否唯一,这里想到可以借助布尔数组。
第一步:忽略字母大小写
可以将输入字符串全部转换为小写或大写,在这里我们采用全部转换为小写,C++中采用tolower(),Java中采用input.tolowerCase()。
第二步:初始化标记数组
创建一个布尔数组作为标记数组(seen),因为ASCII字符码表一共有256个,所以数组大小应为256,每个字符的ACSII作为数组索引,记录每个字符是否已经出现过,若字符已经出现,则对应的seen索引为true。
第三步:遍历字符串,检查是否有重复字符
遍历已转换为小写的输入字符,如果seen数组值为false(此字符没有出现过),将其设置为true,表示已经出现过;如果seen数组值为true(此字符出现过),直接返回“NO”,遍历结束后未发现重复字符,返回“YES”。
3. 代码实现(AC_Code)
- C++
#include <iostream>
#include <string>
using namespace std;
string isUnique(const string& input) //是否唯一函数,返回字符串类型,input值不改变,引用效率高
{
bool seen[256] = { false }; // 字符全部初始化为false
for(char ch : input) // 集合遍历
{
char lowerCh = tolower(ch); //将字符全部转换为小写,以忽略大小写差异
if(seen[lowerCh]) // 判断字符是否出现
return "NO";
seen[lowerCh] = true; // 将字符标记为已出现
}
return "YES"; // 字符唯一
}
int main()
{
string input;
//cin >> input;
getline(cin,input); // 输入字符串,不受空格影响,取整行输入,读取范围比cin更广泛
cout << isUnique(input) << endl;
return 0;
}
- Java
import java.util.Scanner;
public class Main {
public static String isUnique(String input) {
boolean[] seen = new boolean[256];
input = input.toLowerCase();
for (char ch : input.toCharArray()) {
if(seen[ch])
return "NO";
seen[ch] = true;
}
return "YES";
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String input = scan.nextLine();
System.out.println(isUnique(input));
scan.close();
}
}
最后,感谢您的阅读,期待您的一键三连!