zoukankan      html  css  js  c++  java
  • 字符算法 包括字符旋转 包含等问题

    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;
            } 
        }
    }

  • 相关阅读:
    js获取数组最大值或最小值
    echarts 在 vue-awesome-swiper中无法点击
    vue 父子父组件通过props传父页面请求后的数据
    vue 路由对象
    popupwindow
    数据库
    冒泡排序
    xtuils
    版本更新
    清除缓存
  • 原文地址:https://www.cnblogs.com/dasydong/p/3280948.html
Copyright © 2011-2022 走看看