zoukankan      html  css  js  c++  java
  • LeetCode466. Count The Repetitions

    1. 题目链接
    2. 题意
      • 定义一个特殊的串, 现在给出串S1和S2的参数, 问: S2最多可以多少个连接起来扔是S1的子序列, 求出这个最大值
    3. 解题思路
      • 注意s1与S1的区别, 可以去看题目描述, 预处理出s1从s2的每一个字符开始匹配, s1可以匹配到s2串尾的数量, 即如果从s2的当前下标开始匹配, 这一个s1最多可以匹配多少s2, 这个s1匹配完成后匹配到了s2的哪一个字符, 下一个s1匹配s2的话应该从哪一个下标开始, 因为串长最长100, 这个预处理时间消耗是很少的, 有了这个预处理的结果, 我们就可以O(n)的知道S1可以匹配多少个s2, 进而推算出匹配多少个S2.
    4. AC代码
      class Solution {
          public int getMaxRepetitions(String s1, int n1, String s2, int n2) {
              int answer = 0;
          
              ArrayList<Integer> numArrayList = new ArrayList<Integer>();
              ArrayList<Integer> idxArrayList = new ArrayList<Integer>();
          
              for(int i = 0; i < s2.length(); ++i) {
          	int num = 0, idx = i;
          	for(int j = 0; j < s1.length(); ++j) {
          		if(s2.charAt(idx) == s1.charAt(j)) {
          			idx++;
          			if(idx == s2.length()) {
          				num++;
          				idx = 0;
          			}
          		}
          	}
          	numArrayList.add(num);
          	idxArrayList.add(idx);
              }
          
              int idx = 0;
          
              for(int i = 0; i < n1; ++i) {
                  answer += numArrayList.get(idx);
                  idx = idxArrayList.get(idx);
              }
          
              return answer / n2;
          }
      }
      
  • 相关阅读:
    关于回调函数的初探
    细节决定成败
    数据的导航与跳转
    如何在同一页面显示父子表的内容
    从Request到Response之间的所有事件发生的顺序
    如何更改网站的一些公共数据
    如何实现计数器
    DataTable.Select方法
    登出代码
    如何构建自定义控件
  • 原文地址:https://www.cnblogs.com/fan-jiaming/p/12783609.html
Copyright © 2011-2022 走看看