欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
求兩字符串的公共子串
求兩字符串的公共子串,如abc123與123456的公共字串為123,基本想法是在長(cháng)的字符串前面加上長(cháng)度等于短字符串的空格前綴,然后拿短字符串與新字符串挨個(gè)匹配,匹配上的置上匹配字符,否則置上空格,這樣的新串就包含了匹配字串和空格,再劈分放入set即可,重復的元素會(huì )被set略過(guò)去。

代碼如下:
package com.sitinspring;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 求兩字符串的公共子串,如abc123與123456的公共字串為123
 * 
 * 
@author sitinspring(junglesong@gmail.com)
 * 
@since 2008-6-12 下午02:04:06
 * @vsersion 1.00 創(chuàng )建 sitinspring 2008-6-12 下午02:04:06
 
*/

public class CommonChildString{
    
private static final char Space = ' ';
    Set
<String> commonChildStrSet;

    
public CommonChildString(String str1,String str2){
        
// 在str1前加上與str2等長(cháng)的空格,以免漏過(guò)前面的共同字串,這樣做讓?zhuān)螅簦颍币脖厝槐龋螅簦颍查L(cháng)了
        str1=getPrefix(str2.length())+str1;

        
// 用來(lái)存放匹配字串,set能自動(dòng)過(guò)濾掉重復的元素
        commonChildStrSet=new HashSet<String>();
        
for(int i=0;i<str1.length();i++){
            
// 先取字串
            String childStr=getSubString(str1,i, str2.length());
            
            
// 找字串和str2匹配的部分,匹配不上的位置上空格,如123和1a3匹配完變成1_1
            String commonStr=getCommonString(childStr,str2);
            
            
// 把匹配的結果按空格劈分后加入到Set中
            commonChildStrSet.addAll(getSplitResult(commonStr));
        }

    }

    
    
/**
     * 去掉空格部分,把不是空格的匹配字串取出放入到鏈表中返回
     * 
@param str
     * 
@return
     
*/

    
public List<String> getSplitResult(String str){
        List
<String> ls=new ArrayList<String>();
        
        str
=str.trim();
        
        String[] arr
=str.split("\\s+");
        
for(String tmp:arr){
            
if(tmp.length()>0){
                ls.add(tmp);
            }

        }

        
        
return ls;
    }

    
    
    
/**
     * 返回長(cháng)度為為n的空格字符串
     * 
@param n
     * 
@return
     
*/

    
private String getPrefix(int n){
        StringBuffer sb
=new StringBuffer();
        
for(int i=0;i<n;i++){
            sb.append(Space);
        }

        
        
return sb.toString();
    }

    
    
/**
     * 將op1和op2按位比較,相等取哪一位所在的字符,否則留為空格,比較結果返回
     *
     * 
@param op1
     * 
@param op2
     * 
@return
     
*/

    
public String getCommonString(String op1,String op2){
        StringBuffer sb
=new StringBuffer();
        
        
for(int i=0;i<op1.length();i++){
            
char c1=op1.charAt(i);
            
char c2=op2.charAt(i);
            
            sb.append(c1
==c2?c1:Space);
        }

        
        
return sb.toString();
    }

    
    
/**
     * 從str中從startIndex開(kāi)始截取長(cháng)度為length的子字符串
     * 
@param str
     * 
@param startIndex
     * 
@param length
     * 
@return
     
*/

    
private String getSubString(String str,int startIndex,int length){
        String strTmp
=str.substring(startIndex);    
        
int n=strTmp.length();
        
return strTmp.substring(0, length>n?n:length);
    }

    
    
public Set<String> getCommonChildStrSet() {
        
return commonChildStrSet;
    }

    
    
/**
     * 測試
     * 
@param args
     
*/

    
public static void main(String[] args){
        String op1
="123abc456";
        String op2
="abcdef123789655";
        CommonChildString commonChildString
=new CommonChildString(op1,op2);
        
// 輸出觀(guān)察
        System.out.print(op1+""+op2+"的匹配字串有:");
        
for(String tmp:commonChildString.getCommonChildStrSet()){
            System.out.print(tmp
+",");
        }

        System.out.print(
"\n");
    }

}

測試結果:
123abc456和abcdef123789655的匹配字串有:5,123,abc,6,
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
數據結構與算法:13 字符串與整數集合
Python和Java解題:最長(cháng)回文子串
查找兩個(gè)字符串的最大相同子串,最大交集
570,動(dòng)態(tài)規劃解回文串分割 IV
JAVA 按字節截取字符串
JavaScript字符串函數大全
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久