为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

2 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

连续的意思是上一个字符和下一个字符的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;

            

        }


查看完整回答
反对 回复 2019-04-10
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

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


查看完整回答
反对 回复 2019-04-10
  • 2 回答
  • 0 关注
  • 694 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信