• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LvGJ
沉迷学习不秃头
博客园    首页    新随笔    联系   管理    订阅  订阅
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();
    }
}
posted on 2020-03-15 14:24  LvGJ  阅读(822)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3