给定一个长度为 N 的字符串 str,我们的任务是检查该字符串是否同时包含大写字母、小写字母、特殊字符和数字值。如果字符串包含所有这些元素,我们则打印 “Yes”。否则,打印 “No”。
示例:
> 输入: str = "#GeeksForGeeks123@"
> 输出: Yes
> 解释:
> 给定的字符串包含大写字符(‘G‘, ‘F‘)、小写字符(‘e‘, ‘k‘, ‘s‘, ‘o‘, ‘r‘)、特殊字符( ‘#‘, ‘@‘)和数字值(‘1‘, ‘2‘, ‘3‘)。因此,输出为 Yes。
>
>
>
>
>
> 输入: str = "GeeksForGeeks"
> 输出: No
> 解释:
> 给定的字符串仅包含大写字符和小写字符。因此,输出为 No。
朴素方法: 最简单的方法是遍历字符串并检查给定字符串是否包含大写、小写、数字和特殊字符。以下是具体步骤:
- 从头到尾逐个字符遍历字符串。
- 检查每个字符的 ASCII 值是否符合以下条件:
- 如果 ASCII 值位于 [65, 90] 范围内,则它是一个大写字母。
- 如果 ASCII 值位于 [97, 122] 范围内,则它是一个小写字母。
- 如果 ASCII 值位于 [48, 57] 范围内,则它是一个数字。
- 如果 ASCII 值位于 [32, 47]、[58, 64]、[91, 96] 或 [123, 126] 范围内,则它是一个特殊字符。
- 如果字符串包含上述所有内容,则打印 Yes。否则,打印 No。
时间复杂度: O(N)
辅助空间: O(1)
正则表达式方法: 这个思路是利用正则表达式的概念来解决这个问题。以下是具体步骤:
- 创建一个正则表达式来检查给定字符串是否包含大写、小写、特殊字符和数字值,如下所示:
> regex = "^(?=.[a-z])(?=.[A-Z])(?=.\\d)" + "(?=.[-+_!@#$%^&*., ?]).+$"
> 其中,
>
>
>
> – ^ 代表字符串的开始。
> – (?=.*[a-z]) 代表至少有一个小写字符。
> – (?=.*[A-Z]) 代表至少有一个大写字符。
> – (?=.*\\d) 代表至少有一个数字值。
> – (?=.[-+_!@#$%^&., ?]) 代表至少有一个特殊字符。
> – . 代表除换行符以外的任何字符。
> – + 代表一次或多次。
- 使用 Pattern.matcher() 将给定字符串与正则表达式进行匹配。
- 如果字符串与给定的正则表达式匹配,则打印 Yes。否则,打印 No。
下面是上述方法的实现:
C++
CODEBLOCK_5c016108
Java
CODEBLOCK_56d81dcc