博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几种字符串处理的题
阅读量:6094 次
发布时间:2019-06-20

本文共 4152 字,大约阅读时间需要 13 分钟。

1.对于两个字符串A和B,如果A和B中出现的字符种类相同且每种字符出现的次数相同,则A和B互为变形词,请设计一个高效算法,检查两给定串是否互为变形词。

给定两个字符串AB及他们的长度,请返回一个bool值,代表他们是否互为变形词。

测试样例:
"abc",3,"bca",3
返回:true
/*利用数组模拟hash表,将每一个字符对应的ascii码作为数组的下标 每当对应字符出现就让初始化为0的数组赋值为1,这样另外一个字符串 只需要在这个数组里面查找,如果对应的每个字符对应的数组元素都为1,则 说明两个字符串互为变形词,反之不是*/class Transform {public:    bool chkTransform(string A, int lena, string B, int lenb) {        // write code here       if(lena!=lenb)//长度不等直接返回false           return false;        const char *pA=A.c_str();//将string转化为const char*        const char *pB=B.c_str();        int arr[256]={0};        while(*pA){            arr[*pA]=1;            pA++;        }        while(*pB){            if(arr[*pB]!=1)                return false;            pB++;        }        return true;    }};

2.如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A="12345",A的旋转词有"12345","23451","34512","45123"和"51234"。对于两个字符串A和B,请判断A和B是否互为旋转词。

给定两个字符串AB及他们的长度lenalenb,请返回一个bool值,代表他们是否互为旋转词。

测试样例:
"cdab",4,"abcd",4
返回:true
class Rotation {public:    bool chkRotation(string A, int lena, string B, int lenb) {        // write code here        if(lena!=lenb)            return false;        string C=A+A;        const char* pC=C.c_str();        const char* pB=B.c_str();        if(NULL==strstr(pC,pB))            return false;        else            return true;    }};

3.对于一个字符串,请设计一个算法,将字符串的长度为len的前缀平移到字符串的最后。

  给定一个字符串A和它的长度,同时给定len,请返回平移后的字符串。

  测试样例:
  "ABCDE",5,3
  返回:"DEABC"
class Translation {public:    string stringTranslation(string A, int n, int len) {        // write code here        reverseString(A,0,len-1);        reverseString(A,len,n-1);        reverseString(A,0,n-1);        return A;    }    void reverseString(string& str,int low,int high){        int i=low;        int j=high;        while(i

  4.对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。

  给定一个字符串数组strs,同时给定它的大小,请返回拼接成的串。

  测试样例:
  ["abc","de"],2
  "abcde"
bool compare(string str1,string str2){        return str1+str2
strs, int n) { // write code here sort(strs.begin(),strs.end(),compare); string newStr; for(int i=0;i

5.请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。

   给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。

   测试样例:
      "Mr John Smith”,13
    返回:"Mr%20John%20Smith"
      ”Hello  World”,12
    返回:”Hello%20%20World”
class Replacement {public:    string replaceSpace(string iniString, int length) {        // write code here        int count=0,i=0;        while(iniString[i]){            if(iniString[i]==' ')                count++;            i++;        }        int newlen=2*count+length;        char* newStr=new char[newlen+1];        int k=newlen-1;        for(int j=length-1;j>=0;j--){            if(iniString[j]==' '){                newStr[k--]='0';                newStr[k--]='2';                newStr[k--]='%';            }            else{                newStr[k--]=iniString[j];            }        }        newStr[newlen]='\0';        return newStr;      }};

6. 对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。

  给定一个原字符串A和他的长度,请返回逆序后的字符串。

  测试样例:
    "dog loves pig",13
 返回:"pig loves dog"
class Reverse {public:    string reverseSentence(string A, int n) {        // write code here        reverseString(A,0,n-1);      	int i=0,j=0;        for(i=0;i

  7.对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。

给定两棵二叉树的头结点AB,请返回一个bool值,代表A中是否存在一棵同构于B的子树。

/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};*/class IdenticalTree {public:    bool chkIdentical(TreeNode* A, TreeNode* B) {        // write code here        string str1;        string str2;        treeToString(A,str1);        treeToString(B,str2);        return strstr(str1.c_str(),str2.c_str())==NULL?false:true;    }    void treeToString(TreeNode* t,string& str){        if(t==NULL){            str.push_back('#');            return;        }        str.push_back('0'+t->val);        treeToString(t->left,str);        treeToString(t->right,str);    }};

  

 

转载于:https://www.cnblogs.com/guozhijiang/p/4869702.html

你可能感兴趣的文章
推荐:python科学计算pandas/python画图库matplotlib【转】
查看>>
我理解的优秀软件工程师
查看>>
信息安全管理(3):网络安全
查看>>
Unity3D初识---窗口和菜单基础介绍
查看>>
[改善Java代码]集合中的元素必须做到compareTo和equals同步
查看>>
ASM文件系统
查看>>
poj1164 The Castle
查看>>
Combinations Of Coins - Medium
查看>>
vue swiper中的大坑
查看>>
Template Metaprogramming with Modern C++: Introduction
查看>>
二进制、八进制、十进制、十六进制之间的转换
查看>>
洛谷——P1596 [USACO10OCT]湖计数Lake Counting
查看>>
智力大冲浪
查看>>
算法思想(一)理解复杂度
查看>>
JSONP实现跨域
查看>>
Python基础班---第一部分(基础)---Python基础知识---计算机组成原理
查看>>
虚拟机VMware 9安装苹果MAC OSX 10.8图文教程
查看>>
POJ3694 Network
查看>>
Matconvnet环境配置一些坑
查看>>
微信小程序开发-框架
查看>>