StringBuilder、LastIndexOf和IndexOf


StringBuilder、LastIndexOf和IndexOf

  • 首先是StringBuilder,再學習leetcode中使用的最多的是sb.append()sb.reverse()以及sb.toString()其中sb.reverse().toString()經常連用

題目:686. 重復疊加字符串匹配

給定兩個字符串 A 和 B, 尋找重復疊加字符串A的最小次數,使得字符串B成為疊加后的字符串A的子串,如果不存在則返回 -1。

舉個例子,A = "abcd",B = "cdabcdab"。

答案為 3, 因為 A 重復疊加三遍后為 “abcdabcdabcd”,此時 B 是其子串;A 重復疊加兩遍后為"abcdabcd",B 並不是其子串。

  • 在本題中用到了誰是誰的子字符串的問題,我一開始想的是使用charAt(index)這個方法逐個比較字符來判斷是否在A中存在B

  • 在本題中學會了使用sb.LastIndexOf這個函數,通過這個函數,可以很方便的查看A中是否有B,如果沒有就直接返回-1,因此此題就變得簡單了。

    public class Solution686 {
        public int repeatedStringMatch(String A, String B) {
        	int i =1;
        	StringBuilder sb = new StringBuilder();
        	sb.append(A);
        	int blength = B.length();
            //該循環是為了讓sb成為超過或者等於B的長度的字符串
        	while(sb.length()<blength){
        		sb.append(A);
        		i++;
        	}
            //然后查看sb中是否存在,倘若sb中不存在,那么sb再拼接上一個A能不能行
            //如果還不行,就代表不能成為子字符串
        	return sb.indexOf(B)==-1?(sb.append(A).indexOf(B)==-1?-1:i+1):i;
        }
    }
    

題目2:758. 字符串中的加粗單詞

給定一個關鍵詞集合 words 和一個字符串 S,將所有 S 中出現的關鍵詞加粗。所有在標簽 中的字母都會加粗。

返回的字符串需要使用盡可能少的標簽,當然標簽應形成有效的組合。

例如,給定 words = ["ab", "bc"] 和 S = "aabcd",需要返回 "aabcd"。注意返回 "aabcd" 會使用更多的標簽,因此是錯誤的。

這一題也使用了indexOf,但是添加了,fromIndex這個參數,代表從哪里開始

所以可以先遍歷出所有應該被加粗的地方,然后再根據連續與否,進行添加<b>或者<\b>

public class Solution758 {
    public String boldWords(String[] words, String S) {
    	boolean[] isBold = new boolean[S.length()];
    	int n = 0;
    	for(String word : words){
    		n = S.indexOf(word, 0);
    		while(n!=-1){
    			for(int i = 0;i<word.length();i++)isBold[n+i] = true;
    			n = S.indexOf(word,n+1);
    		}
    	}
    	StringBuilder sb = new StringBuilder();
    	if(isBold[0]) sb.append("<b>");
    	for(int i = 0;i<S.length();i++){
    		sb.append(S.charAt(i));
    		if(i==S.length()-1){
    			if(isBold[i]) sb.append("</b>");
    			break;
    		}
    			
    		if(isBold[i]&&!isBold[i+1]) sb.append("</b>");
    		if(!isBold[i]&&isBold[i+1]) sb.append("<b>");
    	}
    	return sb.toString();
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM