我遇到了编程练习并被卡住了。问题是:
您需要为电子邮件定义有效密码,但仅限于此 限制是:
密码必须包含一个大写字符,密码不应包含数字。
现在,给定一个String,找到最长子串的长度 有效的密码。
我能用Java解决这个问题,但无法弄清楚如何在javascript中使用。
这是我的Java解决方案:
public int lengthOfLongestSubstring(String s) {
int n = s.length();
Set<Character> set = new HashSet<>();
int ans = 0, i = 0, j = 0;
while (i < n && j < n) {
if (!set.contains(s.charAt(j))){
set.add(s.charAt(j++));
ans = Math.max(ans, j - i);
}
else {
set.remove(s.charAt(i++));
}
}
return ans;
}
答案 0 :(得分:2)
使用两个正则表达式验证所需的字符串:\D+
和[A-Z]
:
try {
var o = "a0Ba".match(/\D+/g).map(x => x.match(/[A-Z]/) ? x.length : -1);
console.log(Math.max.apply(null, o));
} catch (e) {
console.log(-1);
}
&#13;
答案 1 :(得分:1)
密码必须包含一个大写字符,密码不应包含数字。
根据您当前的规范,regex将匹配给定字符串中的所有有效子字符串。从那里你可以检查最长子串的字符串长度。
正则表达式: (?=[^\d]*[A-Z])[^\d]+
<强>解释强>
(?=[^\d]*[A-Z])
将查找non-digits
后跟大写字母。
[^\d]+
将匹配除数字以外的多个字符。
的 Regex101 Demo 强>
查看以下演示。
document.getElementById('btnfindLength').onclick = function() {
// Try with input "aa0Baa0aaBaa00aa0Ba"
var re = /(?=[^\d]*[A-Z])[^\d]+/g;
var str = document.getElementById('st').value;
var match;
var len = 0;
var longestSubString = null;
do {
match = re.exec(str);
if (match != null) {
console.log(match + " " + match[0].length);
if (match[0].length > len) {
longestSubString = match;
len = match[0].length;
}
}
} while (match);
if (len != 0) {
alert("Longest substring is `" + longestSubString + "` having length " + len);
} else {
alert('No substring found.');
}
}
<input type="text" id="st">
<input type="button" id="btnfindLength" value="Find Length">
答案 2 :(得分:0)
我已经将您的Java代码翻译成Javascript代码,但我不确定您的代码是否有效,无论如何您想使用Javascript进行操作,请参阅以下内容:
function lengthOfLongestSubstring(s) {
var n = s.length;
var set = [];
var ans = 0, i = 0, j = 0;
while (i < n && j < n) {
if (!set.indexOf(s.charAt(j))){
set.push(s.charAt(j++));
ans = Math.max(ans, j - i);
}
else {
set = set.splice(s.charAt(i++), 1);
}
}
return ans;
}
function test() {
var input = document.getElementById("txtTest");
var val = input.value;
console.log(lengthOfLongestSubstring(val));
}
<input type="text" id="txtTest">
<input type="button" id="btnTest" onclick="test()" value="Test">
答案 3 :(得分:0)
您可以.match()
与RegExp
/[\DA-Z]+/g
匹配一个或多个不是数字字符的字符,包括大写字母。如果在-1
的字符串集变量中找不到匹配项,则使用.map()
,RegExp.prptotype.test()
来检查匹配是否包含[A-Z]
,如果true
,则获取{{}每个匹配子字符串的1}},否则返回.length
。将生成的数组传递给使用-1
调用的Math.max()
,以便从生成的数字数组中获取最大数字。
Function.prototype.apply()