jjzjj

longest-substring

全部标签

【Java】深入理解Java中的substring()方法

人不走空                                          🌈个人主页:人不走空      💖系列专栏:算法专题⏰诗词歌赋:斯是陋室,惟吾德馨作为Java中String类的重要方法之一,substring()在字符串处理中扮演着重要的角色。然而,其底层实现原理往往被忽略,本文将深入探讨Java中substring()方法的底层实现,以及如何有效地利用它进行字符串操作。1.方法概述在Java中,substring()方法用于从原字符串中提取子串,常见的方法签名有两种:publicStringsubstring(intbeginIndex)publicStrings

java - 如何检测String.substring是否复制字符数据

我知道对于OracleJava1.7update6和更新版本,当使用String.substring时,String的内部字符数组被复制,对于旧版本,它是共享的。但是我发现没有官方API可以告诉我当前的行为。用例我的用例是:在解析器中,我喜欢检测String.substring是否复制或共享底层字符数组。问题是,如果字符数组是共享的,那么我的解析器需要使用newString(s)显式“取消共享”以避免内存问题。但是,如果String.substring无论如何都会复制数据,那么这就没有必要了,并且可以避免在解析器中显式复制数据。用例://possiblythequeryisveryve

java - String.substring 在 Java 中究竟做了什么?

我一直认为如果我执行Strings="HelloWorld".substring(0,5),那么我只会得到一个新字符串s="Hello".这也记录在JavaAPI文档中:“返回一个新字符串,它是该字符串的子字符串”。但是当我看到下面两个链接的时候,我开始怀疑了。Whatisthepurposeoftheexpression"newString(...)"inJava?Stringconstructorconsidereduselessturnsouttobeusefulafterall基本上,他们说如果我使用Strings="HelloWorld".subString(0,5),我仍然

java - substring() 的垃圾友好替代品

我有一个竖线分隔文件,我解析该文件以获取系统选项。环境对堆分配很敏感,我们正在努力避免垃圾回收。下面是我用来解析竖线分隔字符串的代码。这个函数被调用了大约35000次。我想知道是否有更好的方法不会造成如此多的内存流失。staticintcountFields(Strings){intn=1;for(inti=0;i编辑1,关于java版本:出于业务原因,我们停留在JDK1.6.0_25。关于String和String[]用法的编辑2:String[]用于执行系统设置逻辑。基本上,如果String[0].equals("true")然后启用调试。这就是使用模式关于垃圾收集对象的编辑3:输

java - 如何比较 2 个列表并返回最大子集的列表?

我想比较两个ArrayList并返回Java中相似性最大的子集。所以我想比较列表的各个部分,而不仅仅是单个值。例子:list1list2FAABBCCFDDZZAFC最大子集:Arraylist:[A,B,C]第二大子集应该是:ArrayList:[D,Z]我怎样才能有效地做到这一点?(不使用超过2个for循环)retainAll()不起作用,retainAll()返回相等的值,而不是最大的子集。编辑我想要作为输出,最大子集之前的列表,最大子集,最大子集之后的列表。通过这个例子,输出应该是:[[F],[null]],[A,B,C],[[D,Z,A,F,C],[F,D,Z]]

c++ - 来自两个以上字符串的最长公共(public)子字符串 - C++

我需要从C++中的一组文件名中计算最长的公共(public)子字符串。准确地说,我有一个std::strings的std::list(或QT等价物,也很好)charconst*x[]={"FirstFileWord.xls","SecondFileBlue.xls","ThirdFileWhite.xls","ForthFileGreen.xls"};std::listfiles(x,x+sizeof(x)/sizeof(*x));我需要计算所有字符串的n个不同的最长公共(public)子串,在这种情况下,例如对于n=2"File"and".xls"如果我可以计算最长的公共(publi

C++ 加速多个 substr() 或等效函数调用以解析大字符串

我正在尝试解析从文件加载到内存中的大字符串。我正在使用可变长度的滑动窗口解析DNA序列(存储为字符串)。问题是字符串太大,遍历它们需要很长时间。我不知道这是否可能,但是否有可能以某种方式加快速度?我的意思是我希望I/O主导我的应用程序,所以我将逐行读取改为一次将整个文件读入内存,但在测试我的代码后我发现它大部分时间都在这样的循环中:size_tcurrentCharNumber=0;int16_twindowSize=50;//seqisastringoflength249250621while(seq.length()-currentLinePos将序列从文件加载到内存只需要几秒钟,

c++ - 除了使用 str.substr( ) 在给定位置提取子字符串之外,还有其他方法吗?

我正在尝试比较两个std::strings,并确定字符串A是否与字符串B相同,但插入或删除了单个字符。否则返回假。例如:“start”和“strt”或“ad”和“add”目前:if(((sizeA-sizeB)!=1)&&((sizeB-sizeA)!=1)){returnfalse;}if(sizeA这可以完美地工作,但是gprof告诉我这个功能陷入了困境。我尝试将for循环转换为使用迭代器来访问字符,但这使我的运行时间增加了一倍。我将它缩小到我对std::string.substr()的使用,因为每次stringA和stringB的大小相差1时它都会构造新的字符串。当第一个字符不同

c++ - 如果 std::string::substr 返回 std::string_view 会有什么缺点?

看看这个例子(取自here):classfoo{std::stringmy_str_;public:std::string_viewget_str()const{returnmy_str_.substr(1u);}};这段代码不好,因为substr返回一个临时的std::string,所以返回的std::string_view指的是一个已经存在的-被摧毁的物体。但是,如果substr返回std::string_view,这个问题就不存在了。此外,如果substr返回std::string_view而不是std::string对我来说似乎合乎逻辑,因为返回的字符串是字符串的View,它的

TypeScript算法基础——TS字符串的常用操作总结:substring、indexOf、slice、replace. . .

在TypeScript中,字符串的常用操作可以使用以下方法来实现:常用substring(startIndex:number,endIndex?:number):string:返回从startIndex开始到endIndex(不包括)之间的子字符串。如果省略endIndex,则返回从startIndex到字符串末尾的子字符串。conststr="Hello,World!";constsubStr=str.substring(7,12);//"World"indexOf(searchValue:string,startIndex?:number):number:返回searchValue在字符串