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