java - 我应该如何在java中实现子字符串函数?

标签 java string substring complexity-theory time-complexity

假设您被告知要实现一种 java String.substring 方法。
该方法的签名如下:

public static boolean isSubstring(String i_StringForSearch, String i_SubStringToFind)

这是我的解决方案,但我觉得它仍然不是我能拥有的最好的优雅解决方案。(许多规范的 if else's)
你怎么认为?你会用其他方式来做吗?

public static boolean isSubstring(String i_StringForSearch, String i_SubStringToFind)
    {
        int strForSearchIndex = 0;
        int subStrToFindIndex = 0;
        boolean endOfStringToSearch = false;
        boolean foundSubString = false;
        boolean isThereASequenceOfMatching = false;


        while(!endOfStringToSearch && !foundSubString)
        {
            if(strForSearchIndex == i_StringForSearch.length())
            {
                endOfStringToSearch = true;
            }

            else if(i_StringForSearch.charAt(strForSearchIndex) == i_SubStringToFind.charAt(subStrToFindIndex))
            {
                isThereASequenceOfMatching = true;
                if(subStrToFindIndex == i_SubStringToFind.length() -1 )
                {
                    foundSubString = true;
                }
                subStrToFindIndex++;
                strForSearchIndex++;
            }

            else if(i_StringForSearch.charAt(strForSearchIndex) != i_SubStringToFind.charAt(subStrToFindIndex))
            {
                if(isThereASequenceOfMatching)
                {
                    subStrToFindIndex = 0;
                    isThereASequenceOfMatching = false;
                }
                strForSearchIndex++;
            }
        }

       return foundSubString;
    }

最佳答案

查找 Boyer-Moore 和 Knuth-Morris-Pratt 算法。在多年前的测试中我发现 BM 稍微快一些。

关于java - 我应该如何在java中实现子字符串函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12252057/

相关文章:

java-connector.so 找不到

Java Streams - forEach with pre-Action 和 post-Action

c++ - 如何复制 strncat(原创)

string - 你能用相同的值设置多个(不同的)标签吗?

mysql - 如何将数据与选定数据分开

java - 在 GWT 中使用嵌入式 Neo4j 时出现 AccessControlException

java - 如何使用 java 将十六进制转换为十进制 rgb565?

c++ - 来自具有大小的 char * 缓冲区的双向迭代器

php - 如何在PHP中获取 "_"之前的字符串

java - 如何替换字符串的子字符串