標籤:hdu1867
點擊開啟連結
Problem DescriptionGenerally speaking, there are a lot of problems about strings processing. Now you encounter another such problem. If you get two strings, such as “asdf” and “sdfg”, the result of the addition between them is “asdfg”, for “sdf” is the tail substring of “asdf” and the head substring of the “sdfg” . However, the result comes as “asdfghjk”, when you have to add “asdf” and “ghjk” and guarantee the shortest string first, then the minimum lexicographic second, the same rules for other additions.
InputFor each case, there are two strings (the chars selected just form ‘a’ to ‘z’) for you, and each length of theirs won’t exceed 10^5 and won’t be empty.
OutputPrint the ultimate string by the book.
Sample Input
asdf sdfgasdf ghjk
Sample Output
asdfgasdfghjk
解題思路:題目就是字串模式比對,注意一些細節問題就可以了。但是java寫的就是無限超記憶體,今天心情不好,再交,就過了,這是無語了啊
import java.util.*;class P1867{ static int[] next=new int[100005]; public static void main(String args[]){ int n,m,i,len1,len2; String str1,str2; Scanner sc=new Scanner(System.in); while(sc.hasNext()){ str1=sc.next(); str2=sc.next(); len1=str1.length(); len2=str2.length(); n=kmp(str1,str2); m=kmp(str2,str1); if(n==m){ if(str1.compareTo(str2)>0){ System.out.println(str2+str1.substring(n,len1)); }else{ System.out.println(str1+str2.substring(n,len2)); } }else if(n>m){ System.out.println(str1+str2.substring(n,len2)); }else{ System.out.println(str2+str1.substring(m,len1)); } } } public static void set_next(String str){ int i=0,j=-1; next[0]=-1; int len=str.length(); while(i<len){ if(j==-1||str.charAt(i)==str.charAt(j)){ i++; j++; next[i]=j;///System.out.print(next[i]+" "); }else{ j=next[j]; } } //System.out.println(); } public static int kmp(String str1,String str2){ int i=0,j=0; int len1=str1.length(),len2=str2.length(); set_next(str2); while(i<len1){//System.out.print(j+" "); if(j==-1||(j<len2&&str1.charAt(i)==str2.charAt(j))){ i++; j++;//System.out.print("** "); }else{ j=next[j]; }//System.out.print(j+"* "); }//System.out.println(); if(i==len1){ return j; } return 0; }}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
hdu1867(A + B for you again) 杭電java a題真坑