正则匹配顺序连续或者倒序连续的字符串及其相应的个数

面试中遇到这样一道题,有一个字符串,"12345678abcABCDefghijk9874321YXWV321",现在定义同类型字符(数字为一类型,大写字母为一类型,小写字母为一类型)4个及4个以上为连续,需要找出连续(包括顺序连续和倒序连续)的个数,请问一下各位大神这个应该怎么解决呢?谢谢。

阅读 5.1k
3 个回答

连续的意思是上一个字符和下一个字符的ascii值相差1,并且连续出现4次和以上。这个貌似c语言作业...

java代码:

String str = "12345678abcABCDefghijk9874321YXWV321";
        char f=str.charAt(0);
        int count = 0;
        for(int i=1 ; i < str.length(); ++i) {
            char c = str.charAt(i);
            if(c-f == 1 || f-c==1) {
                ++count;
            }else {
                if(count >= 3) {
                    System.out.println(  str.substring(  i-count-1 ,i)  ) ;
                }
                count = 0;
            }
            f=c;
            
        }
function trans (str) {
  let before = ''
  let len = 0
  let order = null
  let matched = []
  for (let i = 0, length = str.length; i < length; i++) {
    let cur = str[i]
    if (len === 0) {
      before = cur
      len = 1
      order = null
      continue
    }

    let diff = cur.charCodeAt(0) - before.charCodeAt(0)
    if (Math.abs(diff) === 1) {
      order = order || diff
      if (order === diff) {
        len += 1
        before = cur
        continue
      }
    }
    if (len >= 4) {
      matched.push(str.slice(i - len, i))
    }
    before = cur
    len = 1
    order = null
  }
  if (len >= 4) {
    matched.push(str.slice(str.length - len))
  }

  return {
    count: matched.length,
    matched
  }
}
trans("12345678abcABCDefghijk9874321YXWV321").count
新手上路,请多包涵

最近刚好在学正则,这个用正则匹配的话我觉得很合适
let str = "12345678abcABCDefghijk9874321YXWV321"
let aa = str.match(/d{4,}/g)
let bb = str.match(/[A-Z]{4,}/g)
let cc = str.match(/[a-z]{4,}/g)
返回分别匹配数字,大写,小写的数组

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题