每日一题——LeetCode917
2023-12-27 20:38:01
方法一 双指针:
左右指针分别指向字符串的起始和末尾,分别比较两个指针指向的元素是否为英文字母,如果都是则直接交换,哪个指针碰到非英文字母就向前或向后移动一位,另一个指针不变,再次当两个指针指向的元素都是英文字母时再次交换
var reverseOnlyLetters = function(s) {
var left = 0,right =s.length-1
var reg=new RegExp(/^[a-zA-Z]+$/)
s=s.split('')
while(left<right){
if(reg.test(s[left])){
if(reg.test(s[right])){
var temp = s[left]
s[left]=s[right]
s[right]=temp
right--
left++
}else{
right--
}
}else{
left++
}
}
return s.join('')
};
消耗时间和内存情况:
方法二 逆转字符数组
创建一个新数组,非英文字母的位置与原字符串保持一致,将原字符串的英文字母逆序添加到新数组,再把新数组转化为字符串
var reverseOnlyLetters = function(s) {
s=s.split('')
var len = s.length-1,reverse=[],idx=0
var reg=new RegExp(/^[a-zA-Z]+$/)
for(var i=0;i<s.length;i++){
if(!reg.test(s[i])) {
reverse[i]=s[i]
}
}
for(var i=s.length-1;i>=0;i--){
while(!reg.test(reverse[idx])){
idx++
}
if(reg.test(s[i])){
reverse[idx]=s[i]
idx++
}
}
return reverse.join('')
};
消耗时间和内存情况:
文章来源:https://blog.csdn.net/weixin_52878347/article/details/135246585
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!