zoukankan      html  css  js  c++  java
  • 同源异构词查找

    public static void main(String[] args) {
            int ret = commpareStr("abc", "12345cab");
            System.out.println(ret);
        }
    
        //orgStr源字段
        public static int commpareStr(String tarskStr, String orgStr) {
    
            // String tarskStr="acabb";
            char tar[] = tarskStr.toCharArray();
            int count[] = new int[256];
            for (int i = 0; i < tar.length; i++) {
                count[tar[i]]++;
            }
            //count[a]=2  count[c]=1 count[b]=2
    
            //定义一个目标窗口和目标字符串一样大小 以及是否找到了同源异构的flag,flag=0代表找到了,flag=整数则表示多余字符,为负数,则缺少字符
            //什么叫欠债表呢
            //从源来字符串里从头遍历,如果一个字符串出现在欠债表里,则欠债表里的相应字符串的个数减一,如果个数小于0,则flag--
            //当第一次遍历完窗口[0...M-1]的大小的数据后,下一个窗口遍历是[1...M],
            //这是需要处理逻辑和第一次遍历窗口的逻辑不一样
            //第二次以及以后窗口向左边移动的时候,如果进入窗口的字符,如果在欠债表里已经<=0,那么flag++,且欠债表里的相应字符串的个数减一
            //从左边出去的窗口数据[R-M] 以及<0,则flag--,则欠债表里响应字符串的个数+1
    
            //进入窗口的字符,在欠债表里个数-1,出去窗口的字符,在欠债表里个数+1(ps:还给欠债表)
    
    //        commpareStr("abc","12345cad");
            int M = tarskStr.length();
            char org[] = orgStr.toCharArray();
            int R = 0;
            int flag = 0;
            for (; R < M; R++) {
                System.out.println(org[R] + "=" + count[org[R]]);
                if ((count[org[R]] = count[org[R]] - 1) < 0) {//在-1之前已经是0了,如果再次-1必然是负数,flag+1(我欠表里字符一个)
                    flag++;
                }
            }
    
    
            for (; R < org.length; R++) {
                if (flag == 0)//直接找到同源异构词
                    return R - M;
    
                if ((count[org[R]] = count[org[R]] - 1) < 0) {
                    flag++;
                }
    
                if (count[org[R - M]]++ < 0) {
                    flag--;
                }
            }
            return flag == 0 ? R - M : -1;
        }
  • 相关阅读:
    undefined symbol 问题解决记录
    2021年中国数字人民币发展研究报告
    如何画出优秀的架构图
    用SIKT模型,让用户画像效果倍增
    全面总结图表设计
    如何用一周了解一个行业
    未来社区解决方案
    增长4大阶段,实现营销倍增的核心法则
    裂变营销的3个层次,让你实现指数增长
    运营的3个层面,让你轻松获得忠实用户
  • 原文地址:https://www.cnblogs.com/zzq-include/p/14101885.html
Copyright © 2011-2022 走看看