using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication2
{
class StringSuan
{
//字符串是否包含问题 A中的字符是否在B中出现
public static void Contains()
{
string str1 = "ggwahrah";
string str2 = "gwha";
// 开辟一个辅助数组并清零
int[] hash = new int[100];
// num为辅助数组中元素个数
int num = 0;
// 扫描短字符串
for (int j = 0; j < str2.Length; j++)
{
// 将字符转换成对应辅助数组中的索引
int index = str2[j] - 'A';
// 如果辅助数组中该索引对应元素为0,则置1,且num++;
if (hash[index] == 0)
{
hash[index] = 1;
num++;
}
}
// 扫描长字符串
for (int k = 0; k < str1.Length; k++)
{
int index = str1[k] - 'A';
// 如果辅助数组中该索引对应元素为1,则num--;为零的话,不作处理(不写语句)。
if (hash[index] == 1)
{
hash[index] = 0;
num--;
if (num == 0) //m==0,即退出循环。
break;
}
}
// num为0说明长字符串包含短字符串内所有字符
if (num == 0)
Console.WriteLine("TRUE");
else
Console.WriteLine("FALSE");
}
////////
// 字符串左旋转
public static void Reverse(StringBuilder sb, int index, int n)
{
for (int i = 0; i < n / 2; i++)
{
char temp = sb[index + i];
sb[index + i] = sb[index + n - i - 1];
sb[index + n - i - 1] = temp;
}
}
public static void LeftRotate(StringBuilder sb, int index)
{
if (index > sb.Length)
{
Console.WriteLine("please insert smaller number");
return;
}
Reverse(sb, 0, index);
Reverse(sb, index, sb.Length - index);
Reverse(sb, 0, sb.Length);
Console.WriteLine(sb);
}
/////////
//获得字符串中最大的连续数字get the longest number from a string
public static void LongNumber(string n)
{
char[] str = n.ToCharArray();
int max = 0, j = 0;
int start = 0;
bool set = false;
int length = str.Length;
int output = 0;
for (int i = 0; i < length; i++)
{
if (char.IsNumber(str[i]))
{
if (set == false)
start = i;
j++;
set = true;
}
else
{
if (j > max)
{
output = start;
max = j;
}
set = false;
j = 0;
}
}
if (j > max)
{
output = start;
max = j;
}
for (int i = 0; i < max; i++)
Console.Write(str[output + i]);
}
// 字符反转
static string Reverse1(string original)
{
char[] arr = original.ToCharArray();
Array.Reverse(arr);
return new string(arr);
}
static void ver(char[] str)
{
char temp;
int len;
len = str.Length;
for (int i = 0; i < len / 2; i++)
{
temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
Console.WriteLine(str);
}
//字符串中第一个只出现一次的字符“abcdabc” output:d
public static char? Print(string str)
{
if (str.Length == 0 || str == null)
return null;
bool[] marks = new bool[str.Length];
for (int i = 0; i < str.Length; i++)
{
if (marks[i] != true)
{
marks[i] = true;
int count = 0;
for (int j = i; j < str.Length; j++)
{
if (str[j] == str[i])
{
count++;
marks[j] = true;
}
}
if (count == 1)
{
return str[i];
}
}
}
return null;
}
}
}