精华内容
下载资源
问答
  • 给定两个字符串 s 和 t ,编写个函数来判断 t 是否是 s 的字母异词。 示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true 示例 2: 输入: s = “rat”, t = “car” 输出: false 说明: 你可以假设字符串...

    有效的字母异位词

    给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
    示例 1:
    输入: s = “anagram”, t = “nagaram”
    输出: true
    示例 2:
    输入: s = “rat”, t = “car”
    输出: false
    说明:
    你可以假设字符串只包含小写字母。

    思路

    采用哈希表,哈希表用数组构建,数组大小为小写字母的数量26,下表为字符与‘a’的相对大小,数组值为字符出现的次数,先遍历s,记录每个字符出现的次数,然后再遍历t,减去t中出现的字符数,最后判断数组中的所有值是否都为0,是则说明s和t异构,输出true,否则输出false

        bool isAnagram(string s, string t) {
            vector<int> numOfChar(26,0);
            for(auto a : s){			//遍历s记录字符数
                int index = a-'a';
                ++numOfChar[index];
            }
            for(auto a : t){			//遍历t减去字符数
                int index = a - 'a';
                --numOfChar[index];
            }
            for(auto num : numOfChar){	//判断数组是否所有值都为0
                if(num != 0)
                    return false;
            }
            return true;
        }
    
    展开全文
  • 需要考虑字符串是否为数字,首的符号是正还是负,还有在转化时注意减去'0' 如上所示,计算时向左移位乘10,但是需要在最后减去'0',这是因为在计算机中,数字的ASCII值在'0'~'9'之间差了48,而恰好'0'的ASCII值...

    给定一个字符串,在不使用系统方法的前提下,使用自己的方法将这个字符串变成整数int型。如str=‘123’;转化为123

    需要考虑字符串是否为数字,首位的符号是正还是负,还有在转化时注意减去'0'

    如上所示,计算时向左移位乘10,但是需要在最后减去'0',这是因为在计算机中,数字的ASCII值在'0'~'9'之间差了48,而恰好'0'的ASCII值就是48,如果不减这个'0'的话,会发生如下情况

    第一次是res = 0*10+array[1];而array[1]是字符串'1',‘1’的ascii为49,此时就会导致res=49,之后就会全乱,如果此时减去'0',则不会发生这样的错误

    public static int StringtoInt(string str)
            {   if (str == null) return 0;
                char[] array = str.ToCharArray();
                int symbol = 1;
                int flag = 0;
                int res = 0;
                if (array[0] == '-') {
                    symbol = -1;
                    flag++;
                }else if(array[0] == '+') 
                {
                    flag++;
                }
                for (; flag < array.Length; flag++)
                {
                    if (array[flag] < '0' || array[flag] > '9')
                    {
                        return 0;
                    }
                    res = res * 10 + array[flag]-'0';
                }
    
                return res*symbol;
            }

     

    展开全文
  • 2016/9/1 3 LCS

    2016-09-03 10:29:28
    递归的思想就是从最后一个开始,如果两个字符串的最后一位相同,那LCS的长度就是两个串减去最后一位的LCS长度再+1。如果不相同,就是A串减去最后一位和B串的LCS长度与B串减去最后一位和A串的LCS长度中较大的那一位。...

    这个问题一开始看到简直无从下手啊,翻了好几篇博客才想到怎么做,发现搞懂了思路并不难。首先是第一种方法,递归(但是时间复杂度是指数级)。递归的思想就是从最后一个开始,如果两个字符串的最后一位相同,那LCS的长度就是两个串减去最后一位的LCS长度再+1。如果不相同,就是A串减去最后一位和B串的LCS长度与B串减去最后一位和A串的LCS长度中较大的那一位。不难打出代码:

    #include <iostream>
    #include <string>
    using namespace std;
    int max(int a, int b)
    {
    	return a > b ? a : b;
    }
    int LCS(string a, string b)
    {
    	if (a.length() == 0 || b.length() == 0)
    	{
    		return 0;
    	}
    	else if (a[a.length() - 1] == b[b.length() - 1])
    	{
    		return LCS(a.substr(0, a.length() - 1), b.substr(0, b.length() - 1)) + 1;
    	}
    	else
    	{
    		return max(LCS(a, b.substr(0, b.length() - 1)), LCS(a.substr(0, a.length() - 1), b));
    	}
    }
    int main()
    {
    	string a = "programming";
    	string b = "contest";
    	cout << LCS(a, b) << endl;
    }

    另外就是动态规划的方法,其实思想和递归差不多,只不过动态规划是从首位开始去构造,用一个二维数组c(i,j)(表示A长度i,B长度j时的LCS长度)来记录,以双循环的方式去找相同的ij位字符,如果有相同的就直接在原来的基础上+1,如果没有则一样取最大的:

    #include <iostream>
    #include <string>
    using namespace std;
    int max(int a, int b)
    {
    	return a > b ? a : b;
    }
    int LCS(string a, string b)
    {
    	int m = a.length() - 1;
    	int n = b.length() - 1;
    	int c[200][200] = { 0 };
    	for (int i = 0; i <= m; i++)
    	{
    		for (int j = 0; j <= n; j++)
    		{
    			if (a[i] == b[j])
    			{
    				c[i][j] = c[i - 1][j - 1] + 1;
    			}
    			else
    			{
    				c[i][j] = max(c[i][j - 1], c[i - 1][j]);
    			}
    		}
    	}
    	return c[m][n];
    }
    int main()
    {
    	string a = "programming";
    	string b = "contest";
    	cout << LCS(a, b) << endl;
    }


    展开全文
  • 打印1到最大的n位数

    2020-02-09 18:44:57
    代码如下,我们在这里采用大数的运算,即用字符串模拟实现,如果是n位数,那么我们设置一个n+1位的字符串最后一位为‘0’,首先将内部每一位都置为0,然后计算,如果我们得出最后一位++小于等于9,则结束这次循环...

    代码如下,我们在这里采用大数的运算,即用字符串模拟实现,如果是n位数,那么我们设置一个n+1位的字符串,最后一位为‘0’,首先将内部每一位都置为0,然后计算,如果我们得出最后一位++小于等于9,则结束这次循环,如果else,则把这个位数是第一位,需要进位,那么结束全部,已经到了最大的n位数了,否则,前一位加1,takeover表示进位,然后我们原本的那位就是减去10,注明,加减‘0’表示的是由整型变成字符串型,或者反过来。

     

     

    #include <iostream>

    #include <cstring>

    using namespace std;

     

    bool increment(char *number) {

        int length = strlen(number);

        bool is_overflow = false;

        int takeover = 0;

        for (int i = length - 1; i >= 0; --i) {

            int num = number[i] - '0' + takeover;

            if (i == length - 1)

                ++num;

            if (num <= 9) {

                number[i] = num + '0';

                break;

            }

            else {

                if (i == 0)

                    is_overflow = true;

                else {

                    takeover = 1;

                    num -= 10;

                    number[i] = '0' + num;

                }

            }

        }

        return is_overflow;

    }

     

    void print_num(char *number) {

        int length = strlen(number);

        for (int i = 0; i < length; ++i) {

    printf("%c", number[i]);

        }

        printf("\n");

    }

     

    int main() {

        int n;

        cin >> n;

        char *number = new char[n + 1];

        memset(number, '0', n);

        number[n] = '\0';

        while (!increment(number)) {

            print_num(number);

        }

        delete number;
        system("pause");
        return 0;

    }


     

    展开全文
  • 如果确实是最后一位字符那仫就把该数字加1(需要注意的是我们每次都是从最后一个字符开始加起)到这里我们就不得不考虑加法的进位了,只有当字符对应的数字加到10或者比10大时我们需要进位,否则就直接将该...
  • 小强现在可以将任何一个字符串一位以O(1)的代价移到末尾 现在给定一个字符串S,字符串T。求问最少用几次可以将S以上述的方法移动变成T 样例输入 acdk ckad 样例输出 2 将a移到最后变成cdka,将d到最后变成...
  • 实现统计不存在长度大于等于2的回文的操作,在dfs时,要记录当前位前两位数分别是多少,然后再枚举这一位时,选择不能构成回文(长度大于等于2)的数字,最后统计方案数 这道题由于输入很大,long long也不够,...
  • CSP第二题ISBN号码

    2021-03-24 09:51:42
    使用c++字符串容器,直接将...然后将字符串最后一位与c比较,若相同则输出Right,若不同直接将c给最后一个元素。 #include <iostream> #include <string> using namespace std; int main(){ string s;.
  • ABB 题意: 长度为n的字符串,问最少添加多少字符可以使其构成回文字符串 题解: ...我们可以找到最长回文串forajarof,但是最后一位z并不在里面,那你无论怎么构造也用不到forajarof这个回文串,也就
  • 问题很简单,就是给你一个字符串,你求出这个字符串中所...先求出去掉首空格后,找到最后一次出现空格(即出现最后一个词的分割)的index,然后用总长度减去前面的所有字节的长度,既获得了最后一个单词的长度 ...
  • 字符串来控制输入,数组来存储,数组的低位存整数的低位,高位来存储高位, 和:计算的过程基本上和小学生列竖式做加法相同。 差:跟和差不多 乘:计算的过程基本上和列竖式做乘法相同。为编程方便,并不急于处理...
  • ____________________________ ...即将字符串自我匹配,然后字符串长度减去最后一位的next值即为最长重复字串的长度。注意他求的是由多少个最长重复字串组成。 ____________________________ 1 Program sto...
  • javascript文档

    2009-08-11 10:44:24
    lastIndex 属性 返回在字符串中找到的最后一个成功匹配的字符位置。 lastIndexOf 方法 返回在 String 对象中最后出现子字符串的位置。 lastMatch 属性 ($) 从任何正则表达式搜索中返回最后匹配的字符。 lastParen...
  • JScript 语言参考

    2009-05-28 08:53:39
    lastIndex 属性 返回在字符串中找到的最后一个成功匹配的字符位置。 lastIndexOf 方法 返回在 String 对象中最后出现子字符串的位置。 lastMatch 属性 ($) 从任何正则表达式搜索中返回最后匹配的字符。 lastParen...
  • 微软JavaScript手册

    2009-04-08 22:54:53
    lastIndex 属性 返回在字符串中找到的最后一个成功匹配的字符位置。 lastIndexOf 方法 返回在 String 对象中最后出现子字符串的位置。 lastMatch 属性 ($) 从任何正则表达式搜索中返回最后匹配的字符。 lastParen...
  • 高精度加法

    2021-02-12 20:37:23
    首先我们需要先读入数据,这里使用字符串读入,由于读入时首是最大,而运算时需要从个开始,再将字符串反序的存储到个整形数组之中,字符串的存储采用的是ASCII码,转换时,需要减去’0’。然后逐相加...
  • 令SQv是SQ减去最后一个字符所得字符串。判断Q是否是SQv的一个子串,如果Q是SQv的一个子串,说明Q中的字符是可从S复制的,这时把待求序列的下一个字符级联到Q。如果Q不是SQv的一个子串,则表示Q是插入字符。这时把Q...
  • 先进行取模计算,得到最后一个位的字符,然后再进行求商运算,获得前面位的字符值,从右向左添加至结果字符串中。考虑到52应该是AZ,所以必须减去1,再进行求商运算,才能得到第一位是A class Solution { public: ...
  • 奇偶校验(牛客)

    2020-07-21 13:16:44
    输入字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如’3’,输出:10110011)。 题目解析 本题里面将数字和字母统一看成是char类型的,所以数字3实际存储时为ASCII码中的‘3’,其十进制表示是...
  • 2、 数字转换:可以先将英文的0-9存到个字符数组中,因为字符串的输出只需找到相应串的首地址即可,所以可以用个循环逐输出。注意,输入时,在数组中存储的是ASCII码,应将其减去48,得到相应数字。 3、 要...
  • 题目概述: ... 用字符串去存储,累加求和(字符串转数字减去‘0’) 解决代码: #include<stdio.h> #include<string.h> int main() { char c[100000]; int i,n,t=0,sum=0; int a
  • <p>1、从序列号最后一位字符开始,逆向将奇数位(1、3、5等等)相加 <p>2、从序列号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和 <p>3、将...
  • 算法之友好数(1)

    千次阅读 2014-02-09 11:14:05
    题目信息:如果两个正整数组成它们的数字和相同则称它们互为友好数,给定正整数x,求比它大的最小的友好数。例如x = 222, 输出231,因为2 ...如果除最高位外都是0,则在最后补0即可,若原数字最低一位是0,将生成数字中
  • 1.思路:首先将整数和罗马数字的对应关系写在map中,对罗马字符串进行分析:  *罗马字母对应的整数前一位要大于后一位字母对应的整数:则加上这个字母对应的数字 ... *若是最后一位则直接相加 2...
  • 罗马数字转整数【java实现】 思路:先建立一个hashmap将I至M七个...注意最后加上最后一位的a[s.length()-1]。 代码如下: class Solution { public int romanToInt(String s) { HashMap<String , Integer> ma
  • 题目链接:戳这里 题意:给一个字符串,向里面添加“+”或“-”,使之结果等于N。...正确的方法:搜索到每一位数字时,要加上或减去它之后的所有组合情况。 最初的错误代码: #include #include using namespace st
  • 注意:书中给了另外两种方法,分别是原始n左移一位和右移一位的方法,因为Python不会出现整数溢出的情况,这里就不再考虑着两种方法。扩展:判断一个数值是不是2得整数次方,如果是的话,这个数的二进制数中有且只有...
  • 1.从后往前计算,计算出一个就减去计算出的值,进行下一位计算。 1.特殊情况判断 2.最后结果的预备字符串,因为需要一个一个传数字 3.取符号,为循环做准备 4.直接变正 5.精髓之处,去余+除法 6.压入的...
  • 错误信息:IndexError: list ... 对于有序序列: 字符串 str 、列表 list 、元组 tuple进行按索引取值的时候,默认范围为 0 ~ len(有序序列)-1,计数从0开始,而不是从1开始,最后一位索引则为总长度减去1。当然也...
  • Error:IndexError: list ... 对于有序序列: 字符串 str 、列表 list 、元组 tuple进行按索引取值的时候,默认范围为 0 ~ len(有序序列)-1,计数从0开始,而不是从1开始,最后一位索引则为总长度减去1。当然也...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

字符串减去最后一位