每日一题——LeetCode917

每日一题——LeetCode917_第1张图片

方法一 双指针:

左右指针分别指向字符串的起始和末尾,分别比较两个指针指向的元素是否为英文字母,如果都是则直接交换,哪个指针碰到非英文字母就向前或向后移动一位,另一个指针不变,再次当两个指针指向的元素都是英文字母时再次交换

var reverseOnlyLetters = function(s) {
  var left = 0,right =s.length-1
    var reg=new RegExp(/^[a-zA-Z]+$/)
    s=s.split('')
    while(left

消耗时间和内存情况:每日一题——LeetCode917_第2张图片

方法二 逆转字符数组

创建一个新数组,非英文字母的位置与原字符串保持一致,将原字符串的英文字母逆序添加到新数组,再把新数组转化为字符串

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=0;i--){
     while(!reg.test(reverse[idx])){
         idx++
     }
     if(reg.test(s[i])){
         reverse[idx]=s[i]
         idx++
     }
 }
 return reverse.join('')
};

消耗时间和内存情况:

每日一题——LeetCode917_第3张图片

你可能感兴趣的:(每日一题,javascript,算法,leetcode)