300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 字符串:字符串顺序比较 11-2删除重复元素 字符串生成器 着急的WYF(不同子串个数)

字符串:字符串顺序比较 11-2删除重复元素 字符串生成器 着急的WYF(不同子串个数)

时间:2020-09-27 03:59:06

相关推荐

字符串:字符串顺序比较 11-2删除重复元素 字符串生成器 着急的WYF(不同子串个数)

字符串顺序比较

问题描述比较两个字符串s1和s2,输出:0表示s1与s2相等;1表示s1的字母序先于s2;-1表示s1的字母序后于s2输入格式输入两行,第一行输入一个字符串1,第二行输入字符串2。输出格式输出比较的结果样例输入abcabd样例输出1样例输入EnglishEnglish样例输出0样例输入helloha样例输出-1

package 字符串;import java.util.Scanner;public class 字符串顺序比较 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);String s1=sc.next().trim();String s2=sc.next().trim();int n=pareTo(s1);if(n==0)n=0;else if(n>0)n=1;elsen=-1;System.out.println(n);}}

字符串生成器

问题描述有一个字符串生成器,初始时生成的字符串为空串,它每次按照给定概率随机生成一个小写字母,加在当前已生成字符串的后面。给定N个长度为L的字符串,每个字符串由小写字母组成。如果在某个时候,发现每个给定字符串都在当前已生成的字符串中作为子串出现过,生成器就会停下来,将当前生成的字符串作为输出。求输出字符串长度的期望值。输入格式第一行包含一个正整数C,表示有C组数据。每组数据的第一行包含三个正整数N, L, T (L<=6, T<=10)。其中T表示生成器仅会生成前T个小写字母。每组数据的第2~N+1行,每行包含一个长度为L的字符串,每个字符串由前T个小写英文字母组成。每组数据的第N+2行包含T个不超过10000的正整数,设第i个正整数为x,那么字符串生成器生成第i个小写字母的概率为x/10000。输入保证这T个正整数之和为10000。输出格式包含C行,依次对应每组数据。每行包含一个实数,表示输出字符串长度的期望值。样例输入12 3 3aacabb3333 3333 3334样例输出40.5060771264数据规模和约定本题共10个测试点。对于30%的数据,N=1, C=1;对于60%的数据,N<=4, C<=2;对于100%的数据,N<=8, C<=20。其中N=1的数据中存在一个测试点,只有你的答案和我们的答案相差小于1才为正确,并且这个测试点中L=3, T=3;对于其他9个测试点,只有你的答案和我们的答案相差小于0.01才为正确。数据保证正确答案不会超过5*10^6。

11-2删除重复元素

问题描述为库设计新函数DelPack,删除输入字符串中所有的重复元素。不连续的重复元素也要删除。要求写成函数,函数内部使用指针操作。样例输入1223445667889样例输出13579样例输入else样例输出ls数据规模和约定字符串数组最大长度为100。

package 字符串;import java.util.HashMap;import java.util.Map;import java.util.Scanner;public class 删除重复元素 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);char[] a=sc.next().toCharArray();Map<Character,Integer> map=new HashMap<>();for(int i=0;i<a.length;i++){if(map.containsKey(a[i])==false)map.put(a[i],0);map.put(a[i],map.get(a[i]).intValue()+1);}for(int i=0;i<a.length;i++){if(map.get(a[i])==1)System.out.print(a[i]);}}}

着急的WYF(不同子串个数)

问题描述由于战网的密码是一串乱码,WYF巧妙地忘记了他的密码。(他就是作死,如同自掘坟墓。说到掘坟墓,问题就来了——挖掘机技术究竟哪家强?)他现在非常着急,走投无路,都快飞起来了。他只记得他的密码是某个字符串S的子串。现在问题来了,你要告诉他有多少种可能的密码,以帮助他确定他能在多少时间内完成枚举并尝试密码的工作。输入格式输入仅包含一行,为字符串S,不含空格。输出格式输出一个整数,表示可能的密码数量。样例输入ToTal样例输出14数据规模和约定对于70%的数据,S的长度不超过1000;(暴力)对于100%的数据,S的长度不超过15000。(Suffix Array)

不同子串个数

给一个长为n的子串,求不同子串个数,经典题目。

以位置i,i∈[0,n)i,i\in[0,n)i,i∈[0,n)为起点,共有(n−i)(n-i)(n−i)个子串,这其中最多有height[rank[i]]height[rank[i]]height[rank[i]]个串与其它串重复。

结论:不同子串个数等于n∗(n+1)/2−ΣHeightn*(n+1)/2-\Sigma Heightn∗(n+1)/2−ΣHeight

————————————————

版权声明:本文为CSDN博主「Little_Fall」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:/m0_37809890/article/details/98318970

后缀数组(suffix array)

构造Rank数组,对每个i一次计算其后缀的排名,如下第一个后缀排名第4,所以Rank数组第一个为4

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。