LeetCode(五)

  1. LeetCode(五)
  2. LeetCode(五)

     

    1. package com.model.string;
      
      import org.omg.PortableInterceptor.INACTIVE;
      
      import java.util.HashMap;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/8/31 23:11
       * 给你两个字符串,找到同源异构字符串
       * acbd 和abc 即 acb为abc的同源异构字符串
       */
      public class StringDemo01 {
          public static void main(String[] args) {
              String str1="fasdfsdabcdefg";
              String str2="bca";
              System.out.println(getIndex(str1, str2));
      
              System.out.println(getIndex2(str1, str2));
          }
      
      //    窗口移动+记账法
          public static int getIndex2(String str1,String str2){
      
              if (str1.length()<str2.length()||str2.length()==0){
                  return -1;
              }
              int[] table=new int[256];
      //        无效还款数
              int invalid=0;
      //        形成账单
              for (int i = 0; i < str2.length(); i++) {
                 table[str2.charAt(i)]++;
              }
      //        先行成第一个窗口
              for (int i = 0; i < str2.length(); i++) {
                  if (table[str1.charAt(i)]==0){
                      invalid++;
                  }
                  table[str1.charAt(i)]--;
              }
              if (invalid==0){
                  return 0;
              }
      
              for (int i = 0;i < str1.length()-str2.length()+1; i++) {
      //           判断是否已经全部还款,且无效还款为0
                  if (invalid==0){
                      return i;
                  }
      //            滑动窗口
                  if (table[str1.charAt(i)]++<0){
                      invalid--;
                  }
                  if (table[str1.charAt(i+str2.length())]--==0){
                      invalid++;
                  }
              }
      
              return -1;
          }
      
      
      
          //普通方法,列举出所有的和str2一样长的字串进行比对
          public static int getIndex(String str1,String str2){
              for (int i = 0; i < str1.length()-str2.length()+1; i++) {
                  if (isTY(str1.substring(i, i+str2.length()), str2)){
                      return i;
                  }
              }
              return -1;
          }
      //    判断两个字符串是否是同源字符串
          public static boolean isTY(String str1,String str2){
              int[] table=new int[256];
              for (int i = 0; i < str2.length(); i++) {
                  table[str2.charAt(i)]++;
              }
              for (int i = 0; i < str1.length(); i++) {
                  if (table[str1.charAt(i)]==0){
                      return false;
                  }
                  table[str1.charAt(i)]--;
              }
              return true;
          }
      }
  3.  

    LeetCode(五)

     

     

    1.  

LeetCode(五)

上一篇:HDU 5306 Gorgeous Sequence(区间最值操作 吉司机线段树 简单模板题)


下一篇:浅谈RPA(机器人流程自动化)发展