https://leetcode.com/problems/count-the-repetitions/

下面是我的方法,结果对的,超时了。。。

package com.company;

class Solution {
public int getMaxRepetitions(String s1, int n1, String s2, int n2) {
int len1 = s1.length();
int[][]stores = new int[26][len1];
int[] pos = new int[26];
int[] cur = new int[26];
int index; for (int i=0; i<len1; i++) {
index = s1.charAt(i)-'a';
stores[index][pos[index]] = i;
pos[index] = pos[index] + 1;
} int curPos = 0;
int ret = 0;
int len2 = s2.length();
while (true) { for (int i=0; i<n2; i++) {
for (int j=0; j<len2; j++) {
index = s2.charAt(j) - 'a'; if (cur[index] >= pos[index] * n1) { return ret;
} int newPos = 0;
do {
newPos = cur[index] / pos[index] * len1 + stores[index][cur[index] % pos[index]];
cur[index] = cur[index] + 1;
} while (newPos < curPos && cur[index] < pos[index] * n1); if (newPos < curPos) {
return ret;
}
curPos = newPos + 1; }
}
ret++; } }
} public class Main { public static void main(String[] args) throws InterruptedException { String s1 = "niconiconi";
int n1 = 99981;
String s2 = "nico";
int n2 = 81; Solution solution = new Solution();
int ret = solution.getMaxRepetitions(s1, n1, s2, n2); // Your Codec object will be instantiated and called as such:
System.out.printf("ret:%d\n", ret); System.out.println(); } }

优化之后的结果,还是超时:

加了string到array的优化,另外每次循环之后坐个判断剪枝。

package com.company;

class Solution {
public int getMaxRepetitions(String s1, int n1, String s2, int n2) {
int len1 = s1.length();
int[][]stores = new int[26][len1];
int[] pos = new int[26];
int[] cur = new int[26];
int index; for (int i=0; i<len1; i++) {
index = s1.charAt(i)-'a';
stores[index][pos[index]] = i;
pos[index] = pos[index] + 1;
} int curPos = 0;
int ret = 0;
int len2 = s2.length();
char[] array2 = s2.toCharArray();
while (true) { for (int i=0; i<n2; i++) {
for (int j=0; j<len2; j++) {
index = array2[j] - 'a'; int newPos = 0;
while (cur[index] < pos[index] * n1) {
newPos = cur[index] / pos[index] * len1 + stores[index][cur[index] % pos[index]];
cur[index] = cur[index] + 1;
if (newPos >= curPos) {
break;
}
} if (newPos < curPos) {
/*System.out.printf("index %d cur[index] %d pos[index] %d cur/-pos %d, store %d\n",
index, cur[index], pos[index], cur[index] % pos[index], stores[index][cur[index] % pos[index]]); System.out.printf("newPos %d curPos %d\n",
newPos, curPos);
*/
return ret;
}
curPos = newPos + 1; }
}
ret++;
for (int i=0; i<26; i++) {
if (pos[i] > 0 && cur[i] >= pos[i] * n1) {
return ret;
}
} } }
} public class Main { public static void main(String[] args) throws InterruptedException { String s1 = "acb";
int n1 = 4;
String s2 = "ab";
int n2 = 2; Solution solution = new Solution();
int ret = solution.getMaxRepetitions(s1, n1, s2, n2); // Your Codec object will be instantiated and called as such:
System.out.printf("ret:%d\n", ret); System.out.println(); } }

用了这种Brute Force的方法,居然比我的快。。。。。。

public class Solution {
public int getMaxRepetitions(String s1, int n1, String s2, int n2) {
char[] array1 = s1.toCharArray(), array2 = s2.toCharArray();
int count1 = 0, count2 = 0, i = 0, j = 0; while (count1 < n1) {
if (array1[i] == array2[j]) {
j++;
if (j == array2.length) {
j = 0;
count2++;
}
}
i++;
if (i == array1.length) {
i = 0;
count1++;
}
} return count2 / n2;
}
}

(完)

count-the-repetitions的更多相关文章

  1. CH5702 Count The Repetitions

    题意 5702 Count The Repetitions 0x50「动态规划」例题 描述 定义 conn(s,n) 为 n 个字符串 s 首尾相接形成的字符串,例如: conn("abc& ...

  2. [Swift]LeetCode466. 统计重复个数 | Count The Repetitions

    Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...

  3. 466. Count The Repetitions

    Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...

  4. [LeetCode] Count The Repetitions 计数重复个数

    Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...

  5. Leetcode: Count The Repetitions

    Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...

  6. CH5702 Count The Repetitions[倍增dp]

    http://contest-hunter.org:83/contest/0x50%E3%80%8C%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E3%80%8D%E4%B ...

  7. 【leetcode 字符串】466. Count The Repetitions

    https://leetcode.com/problems/count-the-repetitions/description/ 找循环节 https://www.cnblogs.com/grandy ...

  8. 第七周 Leetcode 466. Count The Repetitions 倍增DP (HARD)

    Leetcode 466 直接给出DP方程 dp[i][k]=dp[i][k-1]+dp[(i+dp[i][k-1])%len1][k-1]; dp[i][k]表示从字符串s1的第i位开始匹配2^k个 ...

  9. [LeetCode] 466. Count The Repetitions 计数重复个数

    Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...

  10. LeetCode466. Count The Repetitions

    题目链接 传送门 题意 定义一个特殊的串, 现在给出串S1和S2的参数, 问: S2最多可以多少个连接起来扔是S1的子序列, 求出这个最大值 解题思路 注意s1与S1的区别, 可以去看题目描述, 预处 ...

随机推荐

  1. WPF中viewmodel层怎样得到view层的TabControl控件对象?

    View层: <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns: ...

  2. Winform知识点

    Winform窗体常用的控件 1.按钮 Button 前缀:btn 2.文本框 TextBox 前缀:txt 3.单选按钮 RadioButton 前缀:rdo 4.复选按钮 CheckBox 前缀: ...

  3. javaWEB中的HttpServlet(企业开发使用)

    HttpServlet: 1). 是一个 Servlet, 继承自 GenericServlet. 针对于 HTTP 协议所定制. 2). 在 service() 方法中直接把 ServletReuq ...

  4. -WEBKIT-USER-SELECT:NONE导致输入框无法输入

    原文:http://hicc.me/post/webkit-user-select-none-disabling-text-field.html 最近在webview中写页面的时候发现个别Androi ...

  5. C#'~'按位取反运算符的使用

    按位取反运算符是按照二进制的每一位取反,比如byte类型,~0的结果就是255. 该功能可以在mask中做一些反转操作 如下代码,a存放了2,4,8三个值.用按位取反'~'运算符反转 打印结果是 fa ...

  6. Poj(2407),Greater New York Regional 2015 (D)

    题目链接:http://poj.org/problem?id=2407 Relatives Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  7. android post请求

    参考文章:http://blog.csdn.net/lotusyangjun/article/details/22292445 http://blog.csdn.net/withiter/articl ...

  8. SharePoint API测试系列——Records.BypassLocks测试

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 对于SharePoint中已经是Record的Item,我们想要修改他的属性,这在UI界面是无法完 ...

  9. SpringMvc 使用poi导入导出Excel

    Util类 package com.common.util; public class ExportUtil { private XSSFWorkbook wb = null; private XSS ...

  10. 3.linux man手册

    (12) man作用:查询man手册,获得帮助信息man 1 ls 1表示查询的是linux命令man 2 xxx 2表示查询的是linux apiman 3 xxx 3表示查询的是C库函数注意:在m ...