精华内容
下载资源
问答
  • 从一个字符串中删除另一个字符串

    题目:两个字符串A、B,从A中剔除存在于B中的字符。比如A=“hello world”,B=”er”,那么剔除之后A变为”hllowold”。空间复杂度要求是O(1),时间复杂度越优越好。

    思路:hash+双指针。
    对需要剔除的字符串做hash处理,查询复杂度为O(1), 字符总数为128, 所以空间复杂度为O(1).
    双指针用于对对初始串的替换,在O(n)时间内完成替换,方法是设置两个指针: fast 和 slow。当碰到不是需要剔除的字符时,将fast指针指向的内容赋给slow,fast和slow都向前走一步;当碰到的是需要剔除的字符是,就fast指针向前走一步。

    #include <iostream>
    #include <string>
    using namespace std;
    
    void getHash(const string &str, int arr[]){
        if(str.empty())
            return ;
        for(int i = 0; i < str.length(); i++){
            arr[str[i]] = 1;
        }
    }
    
    void deleteStr(string &str, const int arr[]){
        if(str.empty())
            return ;
        char *fast = &str[0];
        char *slow = &str[0];
    
        while(*fast != '\0'){
            if(arr[*fast] == 0){
                *slow = *fast;
                slow++;
            }
            fast++;
        }
        *slow = '\0';
    }
    
    int main(){
        int hashArr[128];
        memset(hashArr, 0, sizeof(hashArr));
        string pattern = "o";
        string str = "I am a boy!";
    
        cout << str << endl;
        getHash(pattern, hashArr);
        deleteStr(str, hashArr);
    
        cout<< str.data() << endl;
        return 1;
    }
    展开全文
  • 定义一个函数,输入两个字符串,一个字符串中删除在第二个中出现过的所偶字符串。例如第一个字符串"We are students."中删除第二个字符中“auiou”中出现过的字符得到的结果是"W r stdnts" 解题思路:利用...

    http://blog.csdn.net/walkerkalr/article/details/39001155

    定义一个函数,输入两个字符串,从第一个字符串中删除在第二个中出现过的所偶字符串。例如从第一个字符串"We are students."中删除第二个字符中“auiou”中出现过的字符得到的结果是"W r stdnts"

    解题思路:利用哈希查找。

    [cpp] view plain copy
    1. #include <stdio.h>  
    2.   
    3. void deleteStr2FromStr1(char* str1, char* str2)  
    4. {  
    5.     if(str1 == NULL || str2 == NULL || *str1=='\0' || *str2 == '\0')  
    6.         return;  
    7.   
    8.     int hash[256];  
    9.     for(int i=0; i<256; ++i)  
    10.         hash[i] = 0;  
    11.   
    12.     char* p = str2;  
    13.     while(*p != '\0')  
    14.         hash[*p++]++;  
    15.   
    16.     char* strFront = str1;  
    17.     int len = strlen(str1);  
    18.     int small = -1;  
    19.     for(int i=0; i<len; ++i)  
    20.     {  
    21.         if(hash[*(strFront+i)] == 0)  
    22.             str1[++small] = *(strFront + i);  
    23.     }  
    24.   
    25.     str1[++small] = '\0';  
    26. }  
    27.   
    28. int main()  
    29. {  
    30.   
    31.     char str1[] = "We are students";  
    32.     char str2[] = "aeiou";  
    33.     deleteStr2FromStr1(str1, str2);  
    34.   
    35.     printf("%s",str1);  
    36.   
    37.     return 0;  
    38. }  



    展开全文
  • 两个字符串,一个字符串中删除第二字符串中所有字符 用python编写两个字符串,一个字符串中删除第二字符串中所有字符的程序。 Str1 = input('第一个字符串: ') Str2 = input('第二字符串: ') for i in Str1:...

    两个字符串,从第一个字符串中删除第二字符串中所有字符

    用python编写两个字符串,从第一个字符串中删除第二字符串中所有字符的程序。

    Str1 = input('第一个字符串: ')
    Str2 = input('第二字符串: ')
    for i in Str1:
        for j in Str2:
            if i == j:
                Str1 = Str1.replace(i, '')
    print("删除重复后的字符串:{}".format(Str1))
    

    运行结果如下:
    在这里插入图片描述

    展开全文
  • 输入两个字符串,一个字符串中删除第二个字符串中的所有字符 比如输入第一个字符串:“They are students." 第二个字符串: "aeiou" 删除之后的第一个字符串变成"The r stdnts." 题目分析(思路): 创建三个...

    题目:

    输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符
    比如输入第一个字符串:“They are students."
                 第二个字符串: "aeiou"
    删除之后的第一个字符串变成"The r stdnts."


    题目分析(思路):

    创建三个string类对象 第一个s1第二个str2为题目要求的字符串

    第三个str3则用来接收最后需要输出的字符串 

    循环遍历上面两个字符串 str1 str2

    如果str1中出现了str2中的任何一个则跳过看下一个字符 然后将str1中的下一个字符再与str2中的字符进行一一比较

    以此类推 相同跳过 str1中没有一个与str2中的字符相同则压入str3中


    代码展示:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
    	string str1;
    	string str2;
    	string str3;
    	char n=0,m=0;
    	while (1) {
    		n = getchar();
    		if (n == '\n') {
    			break;
    		}
    		str1.push_back(n);
    	}
    	while (1) {
    		m = getchar();
    		if (m == '\n') {
    			break;
    		}
    		str2.push_back(m);
    	}
    	bool sign = true;
    	string::iterator it1 = str1.begin();
    	string::iterator it2;
    	for (it1;it1 != str1.end();++it1) {
    		for (it2=str2.begin();it2 != str2.end();++it2) {
    			if (*it1 == *it2) {
    				sign = false;
    				break;
    			}
    		}
    		if (sign==true){
    			str3.push_back(*it1);
    		}
    		sign = true;
    	}
    	cout << str3.c_str() << endl;
    		system("pause");
    		return 0;
    }

    部分代码分析:

    while (1) {
    		n = getchar();
    		if (n == '\n') {
    			break;
    		}
    		str1.push_back(n);
    	}

    这段代码 ↑ 是输入一个字符串str

    bool sign = true;
    	string::iterator it1 = str1.begin();
    	string::iterator it2;
    	for (it1;it1 != str1.end();++it1) {
    		for (it2=str2.begin();it2 != str2.end();++it2) {
    			if (*it1 == *it2) {
    				sign = false;
    				break;
    			}
    		}
    		if (sign==true){
    			str3.push_back(*it1);
    		}
    		sign = true;
    	}

    这段代码 ↑ 应该是解这个题目的关键核心

    巧妙之处在于定义了一个bool变量 用来标记字符串str2中的其中一字符是否与str1中的其中一个字符相同

    相同则标记为false 然后跳出循环 进行str1中下一个字符的判断 以此类推

    需要注意的是 在压入str3后 要将标记sign重新置为true

    否则上面一步sign被置为false  如果str1中下一个字符与str2中字符没有一个相同 那么也不会被压入str3中

    展开全文
  • 输入两个字符串,第一字符串中删除第二个字符串中所有的字符。 例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.” 输入描述: 每个测试输入包含2个字符串 输出描述: ...
  • 输入两个字符串,第一字符串中删除第二个字符串...这样,哪第一个字符串中读取一个字符便可在byte中快速定位是否相同。简单来说就是哈希映射的思想。 public String CharacterDeletion(String str, String sub) {
  • 定义一个字符串和一个字符,字符串中删除给定的字符</p>
  • /*编程键盘输入一个字符串和一个指定字符, 删除字符串中所有指定的字符,将结果保存到一个新的字符串中并输出*/ #include<stdio.h> #include<string.h> main() { char str[100],s[100],c; int i=...
  • 输入两个字符串,第一字符串中删除第二个字符串中所有的字符。 输入 They are students aeiou 输出 Thy r stdnts 题目分析 这个就是在一个字符串a中查找另一个字符串b中的字母出现的下标,存储在vector中,并通过...
  • 题目:输入两个字符串,第一字符串中删除第二个字符串中所有的字符。  例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。 方法1: package com.jredu.ch12; /*...
  • 题目描述:输入两个字符串,一个字符串中删除第二个字符串中所有的字符。 例如:输入"They are students.",输入"aeiou",则删除之后的第一个字符串变为"Thy r stdnts." 思路:建立数组,将字符串 2 的字符在...
  • 输入两个字符串,一个字符串中删除第二个字符串中所有的字符 例如,输入str1为“ They are students.” 和str2为 “aeiou”, 则删除之后的第一个字符串变为“Thy r stdnts.” 题目分析:如果使用最简单多次遍...
  • 接受用户输入的一个字符串和一个字符,把字符串中所有指定的字符删除后输Java字符串中删除指定子字符串的方法,是Java入门学习中的基础知识,需要的朋友可以下载参考下
  • 输入两个字符串,第一字符串中删除第二个字符串中所有的字符。例 如,输入”They are students.”和”aeiou”, 则删除之后的第一个字符串变成”Thy r stdnts.” - 输入描述: 每个测试输入包含2个字符串 - 输出...
  • 输入两个字符串,一个字符串中删除第二个字符串中的所有字符 比如输入“They are students." 删除之后的第一个字符串变成"The r stdnts." 思路是利用每个字符都有其对应的ASCII码值,将需要删除的字符的ascii为...
  • 直接通过遍历,我们依次判定第一个字符串中是否存在第二个字符串中的第 i 个字符。如果存在,则删除该字符。该方法的时间复杂度为O(n^2)。 代码 def DeleteString(str1, str2): if str1 is None or str2 is None...
  • 输入两个字符串,第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.” 输入描述: 每个测试输入包含2个字符串 输出描述...
  • 请输入两个字符串,第一字符串中删除第二个字符串中所有的字符。 例如: 输入'They are students.' 和 'aeiou' 则删除之后的第一个字符串变成'Thy r stdnts.' ''' s1 = input('请输入第一个字符串:') s2 = input('...
  • 通过遍历,我们依次判定第一个字符串中是否存在第二个字符串中的第i个字符,如果存在,则删除该字符,因此该方法就删除而言的时间复杂度为O(n^2)。 显然,整个算法的时间复杂度还是较大的。 空间兑换时间的方法: ...
  • 题目:定义一个函数,一个字符串中删除在第二个字符串中出现过的所有字符。例如,第一个字符串”We are students.”中删除在第二个字符串”aeiou”中出现过的字符得到的结果是“W r stdnts.”。 我们可以利用...
  • #include void delete_char(char *a, char *b) { if(a==NULL || b==NULL) ...//创建简单哈希数组,存储字符串b个字符出现的次数 char *p = b; while(*p != '\0') hash_table[*p++]++
  • 输入两个字符串,一个字符串中删除第二个字符串中所有的字符,例如:输入“They are students.“和"aeiou”,则删除之后的第一个字符串变成“Thy r stdnts"。 思路: 将第二个字符串的元素一一拿出用来和第一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,139
精华内容 2,055
关键字:

从一个字符串中删除字符