常用算法C#实现:字符串包含问题
来源:互联网 发布:c语言创建目录函数 编辑:程序博客网 时间:2024/06/06 05:35
题目描述:给定两个字符串:strA = ABDcakjeOJPCK,strB = kjeO, 请给出尽可能快方法来判断出 strB中的每个字母是否均包含在strA中。
方案一:利用哈希表的方法
算法步骤描述:
(1)创建一个包含52个大小写字母的哈希表并初始化为0,定义散列函数为:f(x) = x - ‘a’;
(2)遍历并求解短字符串中每个字母的哈希值,并将其存到哈希表中;
(3)遍历并求解长字符串的每个字符哈希值,检查是否包含短字符串的所有哈希值,以此来判断段字符串是否包含在长字符串中;
程序实现:`
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Algorithms{ class Program { public static bool IsStringExist(string stra, string strb) { bool result = false; int[] hashTable = new int[58];//创建哈希表,C#中默认初始化值为0,由于在ascii表中 //字母Z与字母a之间还有字符:[、\、]、^、_、`, //故为了简单起见设哈希表大小为58 int count = strb.Length; for (int i = 0; i < strb.Length; i++) { int index = strb[i] - 'A'; hashTable[index] = 1; } for (int j = 0; j < stra.Length; j++) { int index = stra[j] - 'A'; if (hashTable[index] == 1) { count--; if (count == 0) { result = true; break; } } } return result; } static void Main(string[] args) { string a = "ABDcakjeOJPCK"; string b = "jeOJ"; string c = "JPCKv"; Console.WriteLine("{0}", IsStringExist(a, b)); Console.WriteLine("{0}", IsStringExist(a, c)); Console.ReadKey(); } }}
算法复杂度:O(n+m)
方案二:利用素数法求解
算法步骤描述:
(1)为大小写字母A-Za-z建立一个与之一一对应的素数表,如:A对2,B对3,……,以此类推;
(2)遍历strA(长字符串)并求得其所有字母对应素数的乘积X;
(3)遍历strB(短字符串),用其每个字母对应的素数去除(2)中求得的X,若有一个字母对应的素数不能整除X,则返回false,退出;若所有字母对应的素数均能整除X,则返回true;
程序实现:与方案一类似(略);
0 0
- 常用算法C#实现:字符串包含问题
- 字符串包含问题算法
- 【算法】字符串是否包含问题
- 字符串包含问题 python实现
- 字符串包含问题 python实现
- C#实现常用排序算法
- 两个字符串包含算法
- 【算法】字符串包含
- 算法---字符串包含
- 【算法】字符串包含
- 算法练习 - 字符串包含
- 字符串包含算法
- 字符串问题之串移包含问题<Java实现>
- 【和LULY大神学算法】字符串是否包含问题
- 字符串的包含问题简单情况下的几个算法
- 字符串包含问题
- 字符串移位包含问题
- 字符串的包含问题
- 多态,重载与重写
- Howt to delay code execute when using dwr ajx in javascript
- opensips安装步骤 for CentOS
- KeilMDK调试技巧
- openstack glance、nova backend glusterfs
- 常用算法C#实现:字符串包含问题
- 【设计模式之一:单例模式(二)】JAVA 单例模式完全剖析
- BZOJ 3632 外太空旅行 DFS
- 关注一下
- 9.sonar_treasure_hunts小程序,一些知识的复习
- gitstack重设管理密码
- Ipvsadm参数详解
- 第四周项目零:程序阅读——构造函数和析构函数(2)
- (hdu step 8.2.1)Brave Game(巴什博奕——有n个石子,没人每次可以从里面去[1,m]个,求最后是谁赢了。)