833. Find And Replace in String
To some string
S, we will perform some replacement operations that replace groups of letters with new ones (not necessarily the same size).Each replacement operation has
3parameters: a starting indexi, a source wordxand a target wordy. The rule is that ifxstarts at positioniin the original stringS, then we will replace that occurrence ofxwithy. If not, we do nothing.For example, if we have
S = "abcd"and we have some replacement operationi = 2, x = "cd", y = "ffff", then because"cd"starts at position2in the original stringS, we will replace it with"ffff".Using another example on
S = "abcd", if we have both the replacement operationi = 0, x = "ab", y = "eee", as well as another replacement operationi = 2, x = "ec", y = "ffff", this second operation does nothing because in the original stringS[2] = 'c', which doesn't matchx[0] = 'e'.All these operations occur simultaneously. It's guaranteed that there won't be any overlap in replacement: for example,
S = "abc", indexes = [0, 1], sources = ["ab","bc"]is not a valid test case.
Example 1:
Input: S = "abcd", indexes = [0,2], sources = ["a","cd"], targets = ["eee","ffff"]
Output: "eeebffff"
Explanation: "a" starts at index 0 in S, so it's replaced by "eee".
"cd" starts at index 2 in S, so it's replaced by "ffff".Example 2:
Input: S = "abcd", indexes = [0,2], sources = ["ab","ec"], targets = ["eee","ffff"]
Output: "eeecd"
Explanation: "ab" starts at index 0 in S, so it's replaced by "eee".
"ec" doesn't starts at index 2 in the original S, so we do nothing.
Notes:
0 <= indexes.length = sources.length = targets.length <= 1000 < indexes[i] < S.length <= 1000- All characters in given inputs are lowercase letters.
Approach #1: String. [Java]
class Solution {
public String findReplaceString(String S, int[] indexes, String[] sources, String[] targets) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < indexes.length; ++i) {
if (S.startsWith(sources[i], indexes[i]))
map.put(indexes[i], i);
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < S.length(); ) {
if (map.containsKey(i)) {
sb.append(targets[map.get(i)]);
i += sources[map.get(i)].length();
} else {
sb.append(S.charAt(i));
i++;
}
}
return sb.toString();
}
}
Analysis:
Idea: Use a StringBuilder to build up the result.
1. Iterate through the indexes array and find out all indices that support replacement. Then, store mapping from those index values to their indices in the indexes array into a map named map.
2. Iterate through str, at each iteration i, check whether we can perform replacement, i.e., map.get(i) != null, if yes, append targets[i] to the StringBuilder and increase i by sources[i].length()-1. if no, append str.charAt(i) and increment i.
Reference:
https://leetcode.com/problems/find-and-replace-in-string/discuss/134758/Java-O(n)-solution
833. Find And Replace in String的更多相关文章
- 【LeetCode】833. Find And Replace in String 解题报告(Python)
[LeetCode]833. Find And Replace in String 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu ...
- LC 833. Find And Replace in String
To some string S, we will perform some replacement operations that replace groups of letters with ne ...
- 833. Find And Replace in String —— weekly contest 84
Find And Replace in String To some string S, we will perform some replacement operations that replac ...
- String.replace与String.format
字符串的替换函数replace平常使用的频率非常高,format函数通常用来填补占位符.下面简单总结一下这两个函数的用法. 一.String.replace的两种用法 replace的用法如:repl ...
- [转]String.Replace 和 String.ReplaceAll 的区别
JAVA 中的 replace replaceAll 问题: 测试code System.out.println("1234567890abcdef -----> "+&qu ...
- Java: Replace a string from multiple replaced strings to multiple substitutes
Provide helper methods to replace a string from multiple replaced strings to multiple substitutes im ...
- [LeetCode] Find And Replace in String 在字符串中查找和替换
To some string S, we will perform some replacement operations that replace groups of letters with ne ...
- [Swift]LeetCode833. 字符串中的查找与替换 | Find And Replace in String
To some string S, we will perform some replacement operations that replace groups of letters with ne ...
- JAVA中string.replace()和string.replaceAll()的区别及用法
乍一看,字面上理解好像replace只替换第一个出现的字符(受javascript的影响),replaceall替换所有的字符,其实大不然,只是替换的用途不一样. public String r ...
随机推荐
- 配置yum源
本文转载:https://www.cnblogs.com/yangp/p/8506264.html (一)yum源概述 yum需要一个yum库,也就是yum源.默认情况下,CentOS就有一个yum源 ...
- ---dd-wrt memo
http://blog.csdn.net/fyh2003/article/details/44458657http://blog.csdn.net/u010189241/article/details ...
- 客户端验证、tcp协议中多个客户端的同时在线
一.客户端验证 当在一个局域网内需要验证是否为合法的客户端连接时,我们需要写代码进行验证. Server端 import os import hmac import socket def auth(c ...
- Intellij IDEA中maven更新不下来pom中的jar包,reimport失效
问题: Intellij IDEA中使用maven reimport包,一直失败 即使我将本地已存在的一个jar包目录删除了,pom文件那里也没飘红提示找不到 解决方法: maven设置中去掉离线下 ...
- c++ 面试题(操作系统篇)
1,消息队列: https://kb.cnblogs.com/page/537914/ 2,fork中父进程和子进程的资源联系: https://blog.csdn.net/weixin_422506 ...
- [剑指Offer]36-二叉搜索树与双向链表
链接 https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=11179&tPa ...
- 384. Shuffle an Array数组洗牌
[抄题]: Shuffle a set of numbers without duplicates. Example: // Init an array with set 1, 2, and 3. i ...
- 团队项目NABCD分析
1.卡片分类讨论 我们团队在软件工程课上对准备开发的帮你项目进行激烈的讨论后,得出了两个特点. (1)信息检索 (2)主动推送 之所以得出这两个特点,是因为我们作为学生,平常在校园里面有很多专用群和Q ...
- [leetcode]265. Paint House II粉刷房子(K色可选)
There are a row of n houses, each house can be painted with one of the k colors. The cost of paintin ...
- pycharm快捷键及中文说明【使用翻译工具一条一条翻译】
Search Everywhere: Double Shift Go to File : Ctrl+Shilf+N Recent Files: Ctrl+E Navigation Bar: Alt+H ...