/** * 题目要求: *用Java设计一个程序,实现一个字符串的对称个数,如字符串"effeghg",有"ff","effe","ghg"这三个对称字符,所以返回3. *我实现的思路就是遍历这个字符串, *先选定头位置为第一个字符,然后从最后向前遍历这个字符串, *头尾两个字符相同,则取中间字符串,进行递归。 *递归结束后得到结果, *继续将头向后推1位,然后再从字符串最后向前遍历, * 如此循环,当尾等于头时,退出最外层循环,输出结果。 */ public class FindSymmetryStr { /** * 找出字符串中对称的子字符串的个数 * @param orgStr * @return */ public static int findSymmetryStr(String orgStr) { //结果初始化 int count = 0; //当输入字符串不为null且长度大于1时进行查找,否则直接返回0 if (orgStr != null && orgStr.length() > 1) { //得到输入字符串的长度 int length= orgStr.length(); //字符串的头字符索引 int head; //字符串从后向前遍历时的"尾"字符索引,即当前字符索引 int tail; //字符串的头字符 char hChar; //字符串从后向前遍历时的"尾"字符 char tChar; //从前开始遍历字符串 for (head = 0; head < length; head++) { //取得头字符 hChar = orgStr.charAt(head); //指向输入字符串的最后 tail = length- 1; //当尾字符索引等于头字符索引时退出循环 while (tail > head) { //取得尾字符 tChar = orgStr.charAt(tail); //如果头尾字符相等,则继续判断 if (hChar == tChar) { //取出头尾中间的子字符串,对其进行分析 String newStr = orgStr.substring(head + 1, tail); //如果此子字符串的长度大于1,则进行递归 if (newStr.length() > 1) //递归得到此子字符串中对称的字符串个数 count += findSymmetryStr(newStr); //如果此子字符串只有1个或0个字符,则表明原头尾字符和此单个字符组成对称字符串 else count++; } tail--; } } } return count; } //测试程序 public static void main(String args[]) { int count = findSymmetryStr("effeghg");// System.out.println("symmetry string count is : " + count); }
相关推荐
5. **Trie树(字典树)**:如果需要频繁查询多个不同的子字符串,可以先将这些子字符串构建成Trie树,然后遍历主字符串,每遇到一个子串的开头就在Trie树中查找,找到就计数。 6. **动态规划**:对于特定的问题,如...
- 当处理具有对称性的字符串查找问题时,Manacher's Algorithm提供了一种线性时间复杂度的解决方案,特别适合于查找字符串中的最长回文子串。 在学习和练习这些字符串查找技术时,你可以尝试编写不同类型的程序,...
在IT领域,字符串处理是计算机科学中的一个基本概念,尤其在编程语言如C++中,字符串操作被广泛应用。本问题关注的是寻找一个字符串中最长的回文子串及其长度。回文子串是指一个字符串,从前往后读和从后往前读完全...
4. **字符串处理函数**:C语言中的`strlen()`用于获取字符串长度,`strcpy()`和`strncpy()`用于复制字符串,`strcat()`和`strncat()`用于连接字符串,`strchr()`和`strstr()`用于查找子字符串,这些函数可以辅助我们...
1. **字符串处理**:理解和操作字符串,包括查找模式、替换、编码转换等。 2. **解密算法**:理解加密原理,逆向工程以找到解密方法。 3. **C++编程**:使用C++语言编写解密程序,熟悉其语法和面向对象特性。 4. **...
字符串算法是计算机科学中的一个重要领域,它涉及到对字符串(一串字符序列)进行操作和分析的各种算法。在处理文本、编程语言、数据压缩、搜索、排序等问题时,字符串算法起着至关重要的作用。这里我们将深入探讨...
单模式匹配算法是解决字符串问题的关键技术之一,主要用于在一个大文本(主串)中查找是否存在一个已知的模式串(目标串)。MP算法(Manacher's Algorithm)和KMP算法(Knuth-Morris-Pratt Algorithm)都是高效的单...
解决这个问题通常需要用到“串的最小表示法”,这是一种将环形字符串转化为线性形式的方法,以便找到字典序最小的子串。 4. **字符串移位**:HDOJ 3374要求找到字符串经过位移后的字典序最小和最大的字符串及其排名...
回文串是字符串处理中的一个重要...在实际应用中,如果需要查找多个回文子串或进行其他相关的字符串操作,Manacher算法是一个强大的工具。了解并掌握这种算法,对于提升字符串处理能力、优化相关程序性能具有重要意义。
回文串是字符串处理中的一个重要概念,它是指一个正读反读都能读通的字符串,比如"上海自来水来自海上"、"abccba"等。在编程领域,回文串的判断、查找和生成等操作常常被用作面试题或者算法练习,涉及到字符串的基本...
这个方法使用了一个布尔变量`flag`初始化为`true`,然后遍历字符串的前半部分与后半部分进行比较。如果发现不相等的字符,`flag`被设置为`false`,表示这不是一个回文串。如果循环结束时`flag`仍为`true`,则返回`...
1. **KMP(Knuth-Morris-Pratt)算法**:此算法用于在一个字符串中查找子串,避免了不必要的比较。它通过构建一个前缀表来确定何时需要跳过字符,提高了查找效率。理解KMP算法的关键在于理解前缀函数的计算方法。 2...
`sort()`可以对List进行排序,`copy()`可以将一个集合的内容复制到另一个集合。 - `System`: 提供了一些系统级别的操作,如获取当前时间(`currentTimeMillis()`), 清屏(`gc()`), 读取环境变量(`getenv()`)等。 - `...
给定一个字符串,我们遍历每个字符,查找其在置换表中的对应字符,并用这个新字符替换原来的字符。这样,原始的可读信息就被转换成了看似无意义的密文。这个过程是可逆的,只要我们保留了相同的置换表,就可以解密回...
常用的方法有`Substring()`用于截取子字符串,`Replace()`用于替换特定字符或字符串,`Trim()`用于去除字符串两端的空白字符,`IndexOf()`和`LastIndexOf()`用于查找子字符串的位置,`Split()`和`Join()`用于拆分和...
1. **KMP算法**(Knuth-Morris-Pratt Algorithm):KMP算法是一种用于在一个字符串(主串)中查找给定模式串的有效方法,它避免了在匹配过程中不必要的回溯。通过构造部分匹配表,KMP可以在主串中发现模式串的匹配...
`keyword.c`可能是一个关于字符串搜索或处理的程序,它可能包含了对字符串的拼接、查找、替换等操作。在C语言中,我们通常使用字符数组来表示字符串,并通过库函数如`strlen()`计算字符串长度,`strcpy()`复制字符串...
在信息学奥赛中,字符串算法是至关重要的一个领域,特别是在提高篇中,它涉及到的知识点更为深入且复杂。字符串算法不仅需要理解基础的数据结构和算法,还需要掌握字符串特性的运用,以及如何高效地处理文本数据。...
18. 子字符串个数:该题目要求编写一个函数,输出字符串中某个子字符串的个数,考察了候选人的字符串处理能力和算法设计能力。 知识点:字符串处理、哈希表、频率统计。 19. 最大连续递增数字串:该题目要求编写一...
总结来说,这个程序是一个基于.NET Framework 3.5的字符串加密工具,使用DES算法,并允许用户自定义8位的密钥和初始向量。由于DES的安全性较弱,这个工具更适合学习和理解加密原理,而非用于实际高安全性需求的场景...