C/C++教程

LeetCode(五)

本文主要是介绍LeetCode(五),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  1.  

    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;
          }
      }
  2.  

     

     

    1.  

这篇关于LeetCode(五)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!